代码之家  ›  专栏  ›  技术社区  ›  maverick

错误:需要回调函数

  •  3
  • maverick  · 技术社区  · 10 年前

    我正在尝试使用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 回复  |  直到 10 年前
        1
  •  1
  •   Aikon Mogwai    10 年前

    正如您在第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);

        2
  •  1
  •   pRmdk    8 年前

    当我开始第一周的演讲时,我也面临着同样的问题。原因是我安装了错误版本的 发动机

    解决方案是只清除项目的本地node_modules,只使用app。根目录中的js和带有模板的views文件夹。

    这样地:

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

    现在逐个安装依赖项

    npm install express
    npm install consolidate
    npm install nunjucks
    

    最后

    node app.js  // to start the app.
    

    而且你不必 双节棍 作为第4行中的独立依赖项, 构成 ,帮你处理这个。 你应该能够看到应用程序正常运行。

        3
  •  0
  •   HelloWoRlD    8 年前

    遇到同样的问题,由以下人员解决:

    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
  •  0
  •   1565986223    7 年前

    从…起 nunjucks

    使用快递?只需将express应用程序传递到configure: var应用=表达式();

    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 以解析路径。

    推荐文章