在ejs中的locals对象中找到的选项

时间:2015-01-21 09:15:43

标签: node.js ejs

GitHub运行项目时出现以下错误:"在locals对象中找到的选项。选项将复制到选项对象。不推荐使用此行为,将在EJS 3"

中删除

我尝试更新ejs并将模块表达到最新版本,但通知仍然存在。我用google搜索了,ofc,关于它的唯一主题是this,但它没有帮助。

有没有人对此有更多了解?

供参考,以下是完整的重要代码:

应用程序/视图/ index.ejs

<!DOCTYPE html>
<html>
<head>
    <title><%= title %></title>
</head>

<body>
    <h1><%= title %></h1>
    <img src="img/logo.jpg" alt="Hack Hands logo">
</body>
</html>

应用程序/控制器/ index.server.controller.js

exports.render = function(req, res) {
    res.render('index', {
        title: 'MEAN MVC'
    });
};

应用程序/路由/ index.server.route.js

module.exports = function(app) {
    var index = require('../controllers/index.server.controller');
    app.get('/', index.render);
};

应用程序/配置/ express.js

var express = require('express');
module.exports = function() {
    var app = express();

    app.set('views', './app/views');
    app.set('view engine', 'ejs');

    require('../app/routes/index.server.routes.js')(app);

    app.use(express.static('./public'));

    return app;
};

server.js

var port = 1337;
var express = require('./config/express');
var app = express();
app.listen(port);
module.exports = app;
console.log('Server running at http://localhost:' + port);

1 个答案:

答案 0 :(得分:1)

tl; dr:升级到最新版本的EJS。它会删除有关optionslocals的所有警告。

whoami

我是EJS v2中的合作者(或上面@ micnic评论中的合作者)。我在版本2.0.3(或类似的东西)发布后才开始维护EJS,所以我不太了解API的变化情况。

历史

Express.js使用的EJS v2的renderFile函数现在具有签名

function (path[, options[, locals]], cb)

但与Express.js兼容,后者将所有函数调用为

function (path, locals, cb)

将选项混合到locals对象中,EJS会自动选择带有选项-y名称的本地人,并将其视为选项。

但是因为Express.js签名也是EJS v1的函数签名,如果locals中的任何选项被复制到options,我们也会打印警告,敦促开发人员使用新签名localsoptions分开(实际上是me who added the warning)。

但是,Express.js用户在调用约定方面没有选择权,因此Express.js中始终存在警告。

有些用户投诉:#34 #36

首先,@ mde(谁是EJS的主要维护者)推送了fix,它正确地禁用了Express.js和Express.js上的警告。

然而,#36中的人仍在抱怨,因为他正在使用filename as the name of a local,当将当地的本地复制到options时,会打印出警告。

最后,@ mde就像“f *** this shit”和removed all the deprecation warnings,包括一个毫无争议且合法的版本,并发布了版本2.2.4(合法警告是restored by me之后释放)。

未来

@dougwilson(Express.js维护者)说他在Express.js v5中与optionslocals分开interested,就像在EJS v2中一样。我做志愿做出改变,但后来我很忙,所以是的。