Node.js应用程序在注册模块上引发错误

Node.js应用程序在注册模块上引发错误,node.js,webmatrix,Node.js,Webmatrix,我正在关注史蒂文·桑德森的视频,以开始学习NodeJS。我已经安装了EJS和EJS中间件模块。server.js如下所示: var express=require('express'), app = express(), ejsMiddleware = require('ejs-middleware'); app.use(ejsMiddleware(__dirname + '/static', 'html', app)); 但它在这上面抛出了异常,比如: app.use(ejsMiddlew

我正在关注史蒂文·桑德森的视频,以开始学习NodeJS。我已经安装了
EJS
EJS中间件
模块。server.js如下所示:

var express=require('express'),
app = express(),
ejsMiddleware = require('ejs-middleware');

app.use(ejsMiddleware(__dirname + '/static', 'html', app));
但它在这上面抛出了异常,比如:

app.use(ejsMiddleware(__dirname + '/static', 'html', app));
例外情况是:

Application has thrown an uncaught exception and is terminated:
TypeError: Object function app(req, res){ app.handle(req, res); } has no method 'register'
    at C:\Users\...Inventify\node_modules\ejs-middleware\ejs-middleware.js:9:23
    at Object.<anonymous> (C:\Users\...Inventify\server.js:8:9)
    at Module._compile (module.js:446:26)
    at Object..js (module.js:464:10)
    at Module.load (module.js:353:31)
    at Function._load (module.js:311:12)
    at Module.require (module.js:359:17)
    at require (module.js:375:17)
    at Object.<anonymous> (C:\Program Files (x86)\iisnode-dev\release\x86\interceptor.js:211:1)
    at Module._compile (module.js:446:26)
新的

registerInApp.engine('.' + extension, require(ejs));
但现在有以下例外:

TypeError: Object #<Object> has no method 'substring'
    at Function._resolveLookupPaths (module.js:235:23)
    at Function._resolveFilename (module.js:327:31)
    at Function._load (module.js:279:25)
    at Module.require (module.js:359:17)
    at require (module.js:375:17)
    at C:\Users\...Inventify\node_modules\ejs-middleware\ejs-middleware.js:10:47
    at Object.<anonymous> (C:\Users\...Inventify\server.js:12:9)
    at Module._compile (module.js:446:26)
    at Object..js (module.js:464:10)
    at Module.load (module.js:353:31)
TypeError:对象#没有方法“substring”
at函数。\u resolveLookupPaths(module.js:235:23)
at Function.\u解析文件名(module.js:327:31)
at功能。加载(模块js:279:25)
at Module.require(Module.js:359:17)
根据需要(模块js:375:17)
在C:\Users\…Inventify\node\u modules\ejs middleware\ejs middleware.js:10:47
反对。(C:\Users\…Inventify\server.js:12:9)
在模块处编译(Module.js:446:26)
at Object..js(module.js:464:10)
在Module.load(Module.js:353:31)

看来需要更新
ejs中间件
以调用
app.engine
,而不是
app.register
,才能使用express 3.0。作为一种解决方法,不要将
app
参数传递给ejsMiddleware函数,而是自己手动注册它:

app.engine('.html', require('ejs').renderFile);

我更新了。事实上,这是直接从。据我所知(我个人不使用ejs),看起来您根本不需要
ejs中间件
,只需使用
visionmedia/ejs
,就可以使用它。

我已经更改了这个
registerInApp.register('.+extension,ejs)到<代码>注册表应用程序引擎('.'+扩展,需要(ejs))但是现在我得到另一个错误。我已经更新了问题。成功了!!!谢谢不知道为什么Steven在github上的代码与旧代码配合良好:(
app.engine('.html', require('ejs').renderFile);