Node.js应用程序在注册字符串模块上抛出错误



我在这里跟随Steven Sanderson的视频开始使用NodeJS。已安装EJSejs-middleware模块。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...Inventifynode_modulesejs-middlewareejs-middleware.js:9:23
    at Object.<anonymous> (C:Users...Inventifyserver.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-devreleasex86interceptor.js:211:1)
    at Module._compile (module.js:446:26)

我一点也看不懂。请帮帮我。

编辑:-根据@Peter Lyons的回答做了以下修改:

registerInApp.register('.' + extension, ejs);

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...Inventifynode_modulesejs-middlewareejs-middleware.js:10:47
    at Object.<anonymous> (C:Users...Inventifyserver.js:12:9)
    at Module._compile (module.js:446:26)
    at Object..js (module.js:464:10)
    at Module.load (module.js:353:31)

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

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

我更新了。它实际上直接来自app.engine的express.js文档。据我所知(我个人不使用ejs),看起来你根本不需要ejs-middleware,只需要使用visionmedia/ejs就可以了。

相关内容

最新更新