js的IIS扩展iisnode安装配置笔记_node,js的IIS扩展

日期:2019-12-05编辑作者:服务器

然后把程序入口改为launch.js:

相关文章

相关搜索:

今天看啥

搜索技术库

返回首页

  • iOS9隐藏技能:第三方应用消息快捷回复
  • iPhone会采用无边框设计吗?
  • 苹果ios 9新版备忘录涂鸦工具让你随心所欲
  • iphone自定义怎么修改网络标识字符
  • iphone 6的Safari密码隐藏在哪里
  • iphone6开启限制广告跟踪教程

相关频道: HTML/CSS  HTML5  Javascript  jQuery  AJax教程  前端代码  正则表达式  Flex教程  WEB前端教程  

  • myapp目录下,新建一个index.js,尝试解决此问题

根据说明,保留的REMOTE_ADDR会被改名为x-iisnode-REMOTE_ADDR,所以还得把req.ip的值覆盖一次,在Express的app.js中增加一个中间件函数:复制代码 代码如下:app.use(function { req.ip = req.headers['x-iisnode-REMOTE_ADDR']; next;然而,这样调整后,获取到的IP还是空,这不免让人怀疑,req.ip的赋值是不是失败了。看一下Express的源代码可以发现,req.ip是通过define getter的方式定义的,所以要覆盖它就得再define一次:复制代码 代码如下:app.use(function { Object.defineProperty(req, 'ip', { get: function() { return this.headers['x-iisnode-REMOTE_ADDR']; } }); next;

帮客评论

  •  创建一个Express示例程序

继续测试,又发现另外一个问题。正常来说,博客后台的文件上传功能会把文件传到public/upload这个目录下,但实际上却在launch目录下生成了public/upload文件夹。其实原因是作为程序入口的www文件是在launch目录下,所以launch目录成了应用程序的执行目录。我的解决办法是,把launch目录的名字改回bin,在根目录下创建一个launch.js去调用bin/www:复制代码 代码如下:#!/usr/bin/env node

运行Node.js的IIS扩展iisnode安装配置笔记

 这篇文章主要介绍了运行Node.js的IIS扩展iisnode安装配置笔记,iisnode的扩展可以把Node.js程序托管到IIS,托管之后也意味着可以使用IIS里面的各种功能,需要的朋友可以参考下

 

 

今年年初打算用Node.js基于Express框架重写博客程序,从此告别ASP.NET。然而,我目前用的VPS是Windows Server系统、IIS服务器,如果让Express和IIS都监听80端口,明显会产生冲突。幸好,有一个叫做iisnode的扩展可以把Node.js程序托管到IIS。而且,这样托管之后也意味着可以使用IIS里面的各种功能(进程管理、GZip压缩、日志、缓存、权限控制、域名绑定等)。

要使用iisnode,得安装:

1.Node.js
2.IIS的URL Rewrite模块
3.iisnode

装好之后,还是按照常规操作,在IIS管理器中创建站点,指向Express程序的目录,关键是还要增加一个web.config文件:

代码如下:

<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="bin/www" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" />
</handlers>

 

<rewrite>
<rules>
<rule name="all">
<match url="/*" />
<action type="Rewrite" url="bin/www" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

 

这段内容也可以通过IIS管理器的可视化界面配置。大概意思把所有请求重写到bin/www,而且使用iisnode扩展运行bin/www。然而,打开站点后,却出现了这样的错误提示:

复制代码 代码如下:

请求筛选模块被配置为拒绝包含 hiddenSegment 节的 URL 中的路径
起初是觉得不明所以,后来突然醒悟,ASP.NET里面的bin目录是个不允许访问的特殊目录。把请求重写到bin/www,恰好命中了这条规则。所以呢,改一下目录名就好了,比如把bin改成launch(事实证明这不是好做法,后面再说),web.config也要对应调整:

代码如下:

<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="launch/www" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" />
</handlers>

 

<rewrite>
<rules>
<rule name="all">
<match url="/*" />
<action type="Rewrite" url="launch/www" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>

 

在IIS管理器中重启站点后再次访问,终于运行起来了,不容易啊!不过还是高兴得太早了。

在测试程序功能的过程中,竟然发现获取到的IP为空。在Express框架中,IP是通过req.ip获取的,而req.ip又是从请求头的REMOTE_ADDR获取值。通过一段简单的测试代码,发现REMOTE_ADDR的值也为空。很明显,从IIS到Node.js的过程中,这段头信息丢失了。Google一番之后,发现iisnode确有此问题,官方提供的解决方案是使用X-Forword-For,不过我又发现了另外一个办法。

Web.config中有一段配置(加到</system.webServer>前)可以保留REMOTE_ADDR:

代码如下:

<iisnode promoteServerVars="REMOTE_ADDR" />

 

根据说明,保留的REMOTE_ADDR会被改名为x-iisnode-REMOTE_ADDR,所以还得把req.ip的值覆盖一次,在Express的app.js中增加一个中间件函数:

代码如下:

app.use(function(req, res, next) {
req.ip = req.headers['x-iisnode-REMOTE_ADDR'];
next();
});
然而,这样调整后,获取到的IP还是空,这不免让人怀疑,req.ip的赋值是不是失败了。看一下Express的源代码可以发现,req.ip是通过define getter的方式定义的,所以要覆盖它就得再define一次:

代码如下:

app.use(function(req, res, next) {
Object.defineProperty(req, 'ip', {
get: function() { return this.headers['x-iisnode-REMOTE_ADDR']; }
});
next();
});

 

这样问题终于解决了,但这不是一个好方法,要是以后Express把req.ip设成只读就麻烦了。

继续测试,又发现另外一个问题。正常来说,博客后台的文件上传功能会把文件传到public/upload这个目录下,但实际上却在launch目录(即原来的bin目录)下生成了public/upload文件夹。其实原因是作为程序入口的www文件是在launch目录下,所以launch目录成了应用程序的执行目录。我的解决办法是,把launch目录的名字改回bin,在根目录下创建一个launch.js去调用bin/www:

代码如下:

#!/usr/bin/env node

 

require('./bin/www');

 

然后把程序入口改为launch.js:

 

代码如下:

<configuration>
<system.webServer>
<handlers>
<add name="iisnode" path="launch.js" verb="*" modules="iisnode" resourceType="Unspecified" requireAccess="Script" />
</handlers>

 

<rewrite>
<rules>
<rule name="all">
<match url="/*" />
<action type="Rewrite" url="launch.js" />
</rule>
</rules>
</rewrite>

<iisnode promoteServerVars="REMOTE_ADDR" />
</system.webServer>
</configuration>

 

显然,iisnode还不是一个成熟的产品,当然Node.js也不是(至今还没1.0),一切都有待进一步探索和完善。

这篇文章主要介绍了运行Node.js的IIS扩展iisnode安装配置笔记,iisnode的扩展可以把Node.js程序托管到IIS,托...

澳门金莎娱乐网站 1

1.Node.js2.IIS的URL Rewrite模块3.iisnode

今年年初打算用Node.js基于Express框架重写博客程序,从此告别ASP.NET。然而,我目前用的VPS是Windows Server系统、IIS服务器,如果让Express和IIS都监听80端口,明显会产生冲突。幸好,有一个叫做iisnode的扩展可以把Node.js程序托管到IIS。而且,这样托管之后也意味着可以使用IIS里面的各种功能(进程管理、GZip压缩、日志、缓存、权限控制、域名绑定等)。

  • 再访问,出现错误Cannot find module 'serve-favicon' ,粗心忘记NPM INSTALL了。。。
  • 执行CMD命令 npm install为myapp安装依赖包
  • 重新访问网页 Not Found**
    • 虚拟路径错误,需要在app.js中修改虚拟路径

这段内容也可以通过IIS管理器的可视化界面配置。大概意思把所有请求重写到bin/www,而且使用iisnode扩展运行bin/www。然而,打开站点后,却出现了这样的错误提示:复制代码 代码如下:请求筛选模块被配置为拒绝包含 hiddenSegment 节的 URL 中的路径起初是觉得不明所以,后来突然醒悟,ASP.NET里面的bin目录是个不允许访问的特殊目录。把请求重写到bin/www,恰好命中了这条规则。所以呢,改一下目录名就好了,比如把bin改成launch,web.config也要对应调整:复制代码 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Not Found
 
404
Error: Not Found
    at D:LibrariesDocumentsVisual Studio Codemyappapp.js:30:13
    at Layer.handle [as handle_request] (D:LibrariesDocumentsVisual Studio Codemyappnode_modulesexpresslibrouterlayer.js:95:5)
    at trim_prefix (D:LibrariesDocumentsVisual Studio Codemyappnode_modulesexpresslibrouterindex.js:312:13)
    at D:LibrariesDocumentsVisual Studio Codemyappnode_modulesexpresslibrouterindex.js:280:7
    at Function.process_params (D:LibrariesDocumentsVisual Studio Codemyappnode_modulesexpresslibrouterindex.js:330:12)
    at next (D:LibrariesDocumentsVisual Studio Codemyappnode_modulesexpresslibrouterindex.js:271:10)
    at D:LibrariesDocumentsVisual Studio Codemyappnode_modulesexpresslibrouterindex.js:618:15
    at next (D:LibrariesDocumentsVisual Studio Codemyappnode_modulesexpresslibrouterindex.js:256:14)
    at Function.handle (D:LibrariesDocumentsVisual Studio Codemyappnode_modulesexpresslibrouterindex.js:176:3)
    at router (D:LibrariesDocumentsVisual Studio Codemyappnode_modulesexpresslibrouterindex.js:46:12)

澳门金莎娱乐网站,在IIS管理器中重启站点后再次访问,终于运行起来了,不容易啊!不过还是高兴得太早了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<configuration>
  <system.webServer>
    <!-- bin/www 是Express示例默认的启动程序 -->
    <handlers>
      <add name="iisnode" path="bin/www" verb="*" modules="iisnode" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="myapp">
          <match url="/*" />
          <action type="Rewrite" url="bin/www" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

在测试程序功能的过程中,竟然发现获取到的IP为空。在Express框架中,IP是通过req.ip获取的,而req.ip又是从请求头的REMOTE_ADDR获取值。通过一段简单的测试代码,发现REMOTE_ADDR的值也为空。很明显,从IIS到Node.js的过程中,这段头信息丢失了。Google一番之后,发现iisnode确有此问题,官方提供的解决方案是使用X-Forword-For,不过我又发现了另外一个办法。

澳门金莎娱乐网站 2

这样问题终于解决了,但这不是一个好方法,要是以后Express把req.ip设成只读就麻烦了。

  • 修改views/layout.jade,注意有个相对CSS相对路径,去掉最前的斜杠

显然,iisnode还不是一个成熟的产品,当然Node.js也不是,一切都有待进一步探索和完善。

澳门金莎娱乐网站 3

要使用iisnode,得安装:

澳门金莎娱乐网站 4

装好之后,还是按照常规操作,在IIS管理器中创建站点,指向Express程序的目录,关键是还要增加一个web.config文件:复制代码 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<configuration>
  <system.webServer>
    <!-- index.js 是myapp的启动程序 -->
    <handlers>
      <add name="iisnode" path="index.js" verb="*" modules="iisnode" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="myapp">
          <match url="index.js/debug" negate="true" />
          <action type="Rewrite" url="index.js" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

Web.config中有一段配置(加到前)可以保留REMOTE_ADDR:复制代码 代码如下:

  • 终于见到Node Inspector了,在浏览器中输入 Inspector将捕获这个处理

复制代码 代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<configuration>
  <system.webServer>
    <!-- index.js 是myapp的启动程序 -->
    <handlers>
      <add name="iisnode" path="index.js" verb="*" modules="iisnode" />
    </handlers>
    <rewrite>
      <rules>
        <rule name="myapp">
          <match url="/*" />
          <action type="Rewrite" url="index.js" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

  修改web.config中的url rewriter节,将index.js/debug这个地址设置成不匹配negate="true"。

  • 在IIS中创建一个myapp的目录发布此node程序
    • 应用程序池:DefaultAppPool(IIS默认的,.Net 集成)

澳门金莎娱乐网站 5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
iisnode encountered an error when processing the request.
HRESULT: 0x2
HTTP status: 500
HTTP subStatus: 1002
HTTP reason: Internal Server Error
 
You are receiving this HTTP 200 response because system.webServer/iisnode/@devErrorsEnabled configuration setting is 'true'.
 
In addition to the log of stdout and stderr of the node.exe process, consider using debugging and ETW traces to further diagnose the problem.
 
The last 64k of the output generated by the node.exe process to stderr is shown below:
Application has thrown an uncaught exception and is terminated:
Error: Cannot find module '../app'
    at Function.Module._resolveFilename (module.js:325:15)
    at Function.Module._load (module.js:276:25)
    at Module.require (module.js:353:17)
    at require (internal/module.js:12:17)
    at Object.<anonymous> (D:LibrariesDocumentsVisual Studio Codemyappindex.js:7:11)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)
    at Function.Module._load (module.js:300:12)
    at Module.require (module.js:353:17)
1
2
3
4
app.use('/myapp',express.static(path.join(__dirname, 'public')));
 
app.use('/myapp', routes);
app.use('/myapp/users', users);

2.将Node.js Express框架示例程序部署在IISNode中

  • 出现上面错误的原因是UrlRewriter配置

 

1
2
3
var app = require('./app');
var debug = require('debug')('myapp:server');
var http = require('http');

     04.iisNode&myApp

  iisnode各种叼,支持发布后跨平台远程调试,如果发布过程中遇到问题怎么办呢,iisnode发布5年了(目前是0.2.*版本),应该积累了不少issues了,一篇篇翻看,或者去问作者解决吧。

  将bin/www代码剪切过来,并删除bin/www,修改Web.config中的入口程序为index.js

澳门金莎娱乐网站 6

1
2
3
4
5
6
7
8
9
10
11
cd D:LibrariesDocumentsVisual Studio Code
$ express myapp
   
create : myapp
create : myapp/package.json
......
   
install dependencies:
cd myapp && npm install
run the app:
> SET DEBUG=myapp:* & npm start

3.总结

  • 此时重新浏览
    • 这个运行时错误表示node在执行index.js过程中出错,是个相对地址写错了的问题,node终于执行了,不容易啊,可能因为我将bin/www硬Copy过来忘记修正相对目录了。。

  将所有myapp下的执行请求都交给index.js去执行了,显然myapp/index.js/debug这个地址不应该给index.js去执行。

1
2
3
HTTP 错误 404.8 - Not Found
 
请求筛选模块被配置为拒绝包含 hiddenSegment 节的 URL 中的路径。
  • 在Chrome中打开
    • 看来这个index.js/debug这个连接被app执行了...
    • 到目前为止,所有错误完全无法调试,全靠我经(wo)验(shi)丰(cai)富(de)
  • 修改index.js
    • ../app改成./app就少了个点,看出来了么

   参考此篇内容,部署一个iisnode示例

  Nodejs in Visual Studio Code 08.IIS : 

1
2
3
4
5
6
7
doctype html
html
  head
    title= title
    link(rel='stylesheet', href='stylesheets/style.css')
  body
    block content
  • 创建Web.config文件至myapp目录
    • 注意上图,Node Express的启动程序是bin/www文件

澳门金莎娱乐网站 7

     示例代码,请前往: 

  • 此时在浏览器中打开地址
    • 原因是bin目录是默认输出目录,默认不允许模块调用
  • 修改app.js,注意发布路径是myapp,终于看到了Welcome to Express不容易啊,别忘了改public目录的路径

1.开始

本文由澳门金莎娱乐网站发布于服务器,转载请注明出处:js的IIS扩展iisnode安装配置笔记_node,js的IIS扩展

关键词:

澳门金莎娱乐网站:javascript处理表单示例_基础知

以上就是本文的全部内容了,希望对大家能够有所帮助。 EasyUI中实现form表单提交的示例分享 这里给大家分享的是一...

详细>>

最近一段时间的一些学习,EasyUI实现二级页面的

EasyUI,在增、删的时候,经常用到二级页面进行勾选。 EasyUI实现二级页面的内容勾选的方法  在使用EasyUI的时候,我...

详细>>

使用requestAnimationFrame做动画效果一,Javascript动画

假设有这样一个动画功能需求:把一个div的宽度从100px变化到200px。写出来的代码可能是这样的:复制代码 代码如下...

详细>>

选择器演示代码_jquery_脚本之家澳门金莎娱乐网站

[Ctrl+A 全选 注:如需引进外界Js需刷新技术实行] style for display none's div 档次选拔器准则如下: 全然演示代码: class 为...

详细>>