【问题标题】:Error: callback function required错误:需要回调函数
【发布时间】:2016-12-05 13:18:18
【问题描述】:

我正在尝试使用 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 吗?提前致谢

【问题讨论】:

    标签: node.js mongodb express mean-stack nunjucks


    【解决方案1】:

    正如您在日志中看到的 - 第 7 行 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);

    【讨论】:

    • 它说“找不到模块'templateEngine'
    • sry,我必须在 templateEngine 之前包含“./”。然后我没有得到那个错误。但是“需要回调函数”错误是什么意思呢?
    • 我认为这意味着调用app.engine('html', engines.nunjucks) 不正确,因为engines.nunjucks 不是所需的函数。
    【解决方案2】:

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

    解决方案是清除项目的本地 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.
    

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

    【讨论】:

      【解决方案3】:

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

      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');
      

      【讨论】:

        【解决方案4】:

        来自nunjucks docs:

        使用快递?只需将您的快速应用程序传递给配置: 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解析路径。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-06-16
          • 1970-01-01
          • 1970-01-01
          • 2020-12-20
          • 2015-12-01
          • 2021-04-03
          • 1970-01-01
          相关资源
          最近更新 更多