Nodejs in Visual Studio Code 10.IISNode

1.开始

  Nodejs in Visual Studio Code 08.IIS : http://www.cnblogs.com/mengkzhaoyun/p/5410185.html

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

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

  •  创建一个Express示例程序
$ cd D:\Libraries\Documents\Visual Studio Code
$ express myapp

create : myapp
create : myapp/package.json
......

install dependencies:
> cd myapp && npm install
run the app:
> SET DEBUG=myapp:* & npm start

  • 在IIS中创建一个myapp的目录发布此node程序

    • 应用程序池:DefaultAppPool(IIS默认的,.Net 集成)

  • 创建Web.config文件至myapp目录

    • 注意上图,Node Express的启动程序是bin/www文件
<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>
  • 此时在浏览器中打开地址http://localhost/myapp/,将出现404错误

    • 原因是bin目录是默认输出目录,默认不允许模块调用
HTTP 错误 404.8 - Not Found

请求筛选模块被配置为拒绝包含 hiddenSegment 节的 URL 中的路径。
  • myapp目录下,新建一个index.js,尝试解决此问题

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

<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>
  • 此时重新浏览http://localhost/myapp/,出现运行时错误

    • 这个运行时错误表示node在执行index.js过程中出错,是个相对地址写错了的问题,node终于执行了,不容易啊,可能因为我将bin/www硬Copy过来忘记修正相对目录了。。
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:\Libraries\Documents\Visual Studio Code\myapp\index.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)
  • 修改index.js

    • ../app改成./app就少了个点,看出来了么
var app = require(‘./app‘);
var debug = require(‘debug‘)(‘myapp:server‘);
var http = require(‘http‘);
  • 再访问,出现错误Cannot find module ‘serve-favicon‘ ,粗心忘记NPM INSTALL了。。。
  • 执行CMD命令 npm install为myapp安装依赖包
  • 重新访问网页http://localhost/myapp/,出现404 Not Found
    • 虚拟路径错误,需要在app.js中修改虚拟路径
Not Found

404
Error: Not Found
    at D:\Libraries\Documents\Visual Studio Code\myapp\app.js:30:13
    at Layer.handle [as handle_request] (D:\Libraries\Documents\Visual Studio Code\myapp\node_modules\express\lib\router\layer.js:95:5)
    at trim_prefix (D:\Libraries\Documents\Visual Studio Code\myapp\node_modules\express\lib\router\index.js:312:13)
    at D:\Libraries\Documents\Visual Studio Code\myapp\node_modules\express\lib\router\index.js:280:7
    at Function.process_params (D:\Libraries\Documents\Visual Studio Code\myapp\node_modules\express\lib\router\index.js:330:12)
    at next (D:\Libraries\Documents\Visual Studio Code\myapp\node_modules\express\lib\router\index.js:271:10)
    at D:\Libraries\Documents\Visual Studio Code\myapp\node_modules\express\lib\router\index.js:618:15
    at next (D:\Libraries\Documents\Visual Studio Code\myapp\node_modules\express\lib\router\index.js:256:14)
    at Function.handle (D:\Libraries\Documents\Visual Studio Code\myapp\node_modules\express\lib\router\index.js:176:3)
    at router (D:\Libraries\Documents\Visual Studio Code\myapp\node_modules\express\lib\router\index.js:46:12)
  • 修改app.js,注意发布路径是myapp,终于看到了Welcome to Express不容易啊,别忘了改public目录的路径
app.use(‘/myapp‘,express.static(path.join(__dirname, ‘public‘)));

app.use(‘/myapp‘, routes);
app.use(‘/myapp/users‘, users);
  • 修改views/layout.jade,注意有个相对CSS相对路径,去掉最前的斜杠
doctype html
html
  head
    title= title
    link(rel=‘stylesheet‘, href=‘stylesheets/style.css‘)
  body
    block content

  • 在Chrome中打开http://localhost/myapp/index.js/debug远程调试,出现错误,还是图样啊

    • 看来这个index.js/debug这个连接被app执行了...
    • 到目前为止,所有错误完全无法调试,全靠我经(wo)验(shi)丰(cai)富(de)

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

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

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

<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>

  • 终于见到Node Inspector了,在浏览器中输入http://localhost/myapp/users,Node Inspector将捕获这个处理

3.总结

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

示例代码,请前往:https://github.com/Mengkzhaoyun/nodepractise 

04.iisNode&myApp

时间: 2024-12-24 16:31:18

Nodejs in Visual Studio Code 10.IISNode的相关文章

Nodejs in Visual Studio Code 04.Swig模版

1.开始 设置Node_Global:npm config set prefix "C:\Program Files\nodejs" Express组件:npm install express -g(全局安装) Express-Generator:npm install express-generator -g(全局安装) 如果没有设置global可能导致express命令在cmd里面无法执行 我接触过3个模版jade,ejs,swig,最后选择了swig jade :是express

Nodejs in Visual Studio Code 01.简单介绍Nodejs

1.开始 作者自己:开发人员,Asp.Net , html / js , restful , memcached , oracle ,windows , iis 目标读者:供自己以后回顾 2.我看Nodejs 一个运行时语言,可以使用javascript编写网站程序: 可以运行在windows和linux上,并且不需要iis或tomcat就能够独立运行: 写一些基于业务的API很方便,适合做项目: 据说可以处理高并发等等各种高能,但是我现在并不会: 3.安装Nodejs Nodejs : htt

Nodejs in Visual Studio Code 07.学习Oracle

1.开始 Node.js:https://nodejs.org OracleDB: https://github.com/oracle/node-oracledb/blob/master/INSTALL.md#instwin  https://github.com/oracle/node-oracledb/blob/master/doc/api.md#resultsethandling 2.OracleDB安装 Python 2.7 下载安装即可,略 C Compiler with suppor

Nodejs in Visual Studio Code 08.企业网与CNPM

1.开始 CNPM : https://npm.taobao.org/ 2.企业网HTTP代理上网 平时办公在一个大企业网(10.*.*.*)中,使用HTTP代理上网,发现npm命令无法执行. 解决方案如下: 1.安装并设置好Proxifier,https://www.proxifier.com Proxifier有效解决了node.exe不会找浏览器中设置的代理作为默认代理来执行的尴尬悲剧. 2.安装Shadowsocks,买个VPS,装个服务端,碰到NPM抽风的时候使用--proxy htt

Nodejs in Visual Studio Code 06.新建Module

1.开始 Node.js:https://nodejs.org 2.Moudle js编程中,由于大家可以直接在全局作用域中编写代码,使开发人员可以很容易的新建一个全局变量或这全局模块,这些全局变量或全局模块在工程化的开发中,极易互相冲突,同时也很难搞清楚它们之间互相的依赖关系.Node.js采用CommonJS规范来定义模块与使用模块,提供了required和module.exports来解决这个问题. required()方法,通过required方法将其他模块引用到当前作用域内. modu

Nodejs in Visual Studio Code 03.学习Express

1.开始 下载源码:https://github.com/sayar/NodeMVA Express组件:npm install express -g(全局安装) 2.ExpressRest 打开目录08_ExpressREST app.js var express = require('express'); var app = express(); //捕获GET方法,并处理返回一个Json,比C#写Json简单多了啊 app.get('/', function (req, res) { re

Nodejs in Visual Studio Code 13.构建单页应用Scrat示例挖一挖

1.开始 Scrat作者说要搞个很碉堡的示例,果然就搞出来了,如果要学习并使用Scrat,可以从官方示例开始,简直太方便了. 2.Scrat示例 目录 component_modules : 公共组件 components : 系统级组件 server : 一些服务,不用管 views : Scrat.js,Index.html等Scrat框架内容 component.json : Scrat生态组件配置文件  fis-conf.js : FIS配置文件 package.json : Node配

Nodejs in Visual Studio Code 11.前端工程优化

1.开始 随着互联网技术的发展,企业应用里到处都是B/S设计,我有幸经历了很多项目有Asp.Net的,有Html/js的,有Silverlight的,有Flex的.很遗憾这些项目很少关注前端优化的问题,而将所有的100%的对性能关注集中于业务设计.第三方平台.数据库等方面,然而我想说只要拿出1%的精力,做一些前端优化的工作,也可以极大提升系统访问效率. 我见过一些项目加载html,js,css,xap等静态资源用了1~2秒,核心服务2~3秒,最后呕心沥血半个月仅能将核心服务优化0.5S,互联网早

10.【转】Visual Studio Code 必备插件,主题及语法提示

原文地址:http://www.css88.com/archives/8064 小编推荐:掘金是一个面向程序员的高质量技术社区,从 一线大厂经验分享到前端开发最佳实践,无论是入门还是进阶,来掘金你不会错过前端开发的任何一个技术干货. Visual Studio Code 是由微软开发的一款免费的,跨平台文本编辑器.由于其出色的性能表现和丰富的功能,它很快成为了开发者的最爱. 与大多数 IDE 一样,VSCode 也有一个扩展市场,包含数千个具有不同功能的插件.为了帮助您挑选值得下载的东西,我们收