微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

node.js – 在ejs中的locals对象中找到的选项

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

解决方法

tl; dr:升级到最新版本的EJS.它会删除有关选项和本地的所有警告.

我是谁

我是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会自动选择带有option-y名称的locals,并将它们视为选项.

但由于Express.js签名也是EJS v1的函数签名,如果将本地文件中的任何选项复制到选项,我们也会打印警告,敦促开发人员使用新签名与本地和选项分开(实际上是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,当选项本地复制到选项时会打印一个警告.

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

未来

@dougwilson(一位Express.js维护者)说他是interested,在Express.js v5中分离选项和本地人,就像在EJS v2中一样.我做志愿做出改变,但后来我很忙,所以是的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐