3

我正在尝试使用 node、express 和 mongodb 将对象呈现为 html。当我尝试下面的代码时

var express=require('express'),
app=express(),
engines = require('consolidate'),
nunjucks  = require('nunjucks');

app.set('view engine', 'html');
app.engine('html', engines.nunjucks);
app.set('views', __dirname + '/views');

app.get('/',function(req,res){
res.render('index',{'name':'Hello'});
})

app.use(function(req,res){
res.sendStatus(404);
})

var server = app.listen(3000,function(){
var port=server.address().port;
console.log('Express server listening on port', port);
})

我收到如下回调函数错误

D:\Wiki>node app.js
D:\Wiki\node_modules\express\lib\application.js:174
if ('function' != typeof fn) throw new Error('callback function required');
                       ^

Error: callback function required
at Function.app.engine (D:\Wiki\node_modules\express\lib\application.js:174:
38)
at Object.<anonymous> (D:\Wiki\app.js:7:5)
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 Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
at node.js:968:3

有人可以帮我如何使用 nunjucks 渲染 html 吗?提前致谢

4

4 回答 4

1

你好,蒙古大学的同学!在本周的第一堂课开始时,我也遇到了同样的问题。原因是我从头开始编写代码时安装了不正确版本的引擎依赖项。

解决方案是清除项目的本地 node_modules 并在根目录和视图文件夹中使用 app.js 和模板。

像这样 :

hello_world
 --app.js
 --views
 ----index.html

现在一一安装依赖

npm install express
npm install consolidate
npm install nunjucks

最后

node app.js  // to start the app.

此外,您不必在第 4 行中将 nunjucks作为单独的依赖项, considate会为您处理这个问题。您应该能够看到该应用程序正常运行。

于 2017-08-13T19:39:13.893 回答
1

正如您在第 7 行的 log-error 中看到的那样app.engine('html', engines.nunjucks);。所以问题就在这里。

添加新文件,例如templateEngine.js

var nunjucks  = require('nunjucks');

module.exports = function (app) {
    // store environment env
    var env = nunjucks.configure(['views/', 'views2/'], {
        autoescape: true,
        express   : app
    });

    // This is filter example. You can use it by {{varname | myFilter}} in template
    env.addFilter('myFilter', function(text) {
        return text.toUpperCase();
    });
}

在主 js 调用中require('templateEngine')(app);

于 2016-07-31T09:08:20.960 回答
0

遇到了同样的问题,解决方法:

1)npm install consolidate nunjucks --save

2) 在 app.js/server.js/index.js 或任何您命名的主应用程序文件中定义合并:

var consolidate = require('consolidate');

3)中间件应该是:

app.engine('html', consolidate.nunjucks);
app.set('views', './views');
于 2017-11-08T12:47:39.567 回答
0

来自nunjucks文档:

使用快递?只需将您的 express 应用程序传递给 configure: var app = express();

nunjucks.configure('views', {
    autoescape: true,
    express: app
});

所以你可以这样做(假设你views在包含这个文件的同一目录中有一个文件夹):

{code...}
var app = express();
var nunjucks = require('nunjucks');

nunjucks.configure(__dirname + '/views', {...

app.set('view engine', 'html');
{...}

注意使用nodejs__dirname解析路径。

于 2018-10-30T08:03:23.577 回答