当地居民在ejs中find对象

从GitHub运行项目时出现以下错误:“在locals对象中find的选项,选项被复制到选项对象。这种行为已被弃用,并将在EJS 3”

我试图更新ejs和expression模块到最新版本,但通知仍然存在。 我GOOGLE了,ofc,唯一的线索是这个 ,但它没有帮助。

有没有人知道更多关于这个?

作为参考,这里是整个重要的代码:

应用/视图/ 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); }; 

应用程序/configuration/ 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。 它删除了关于optionslocals所有警告。

whoami

我是EJS第二版的合作者(或上文@ micnic评论中合作者)。 我只是在版本2.0.3(或类似的东西)发布之后才开始维护EJS,所以我不知道如何进行API更改。

历史

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

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

但是为了和Express.js兼容,所有的函数都是这样调用的

 function (path, locals, cb) 

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

但是因为Express.js签名也是EJS v1的函数签名,所以我们也会打印一个警告,如果在locals任何选项被复制到options ,促使开发人员使用新的签名与localsoptions分开(实际上是我谁加警告 )。

但是,Express.js用户在调用约定方面没有select,所以警告总是存在于Express.js中。

有些用户抱怨说: #34 #36 。

起初,@mde(谁是EJS的主要维护者)推送了一个修正 ,只能在Express.js和Express.js上正确禁用警告。

但之后,#36中的人仍然抱怨,因为他正在使用filename作为本地名称 ,并且当optiony local被复制到options会打印警告。

最后,@ mde就像“f *** this shit”,并删除了所有的弃用警告 ,其中包括一个没有争议的合法警告,并且发布了2.2.4版(发布后我恢复了合法的警告)。

未来

@dougwilson(Express.js维护者)表示,他对 Express.js v5中的options和本地化的分离感兴趣 ,就像在EJS v2中一样。 我做了志愿者来做这个改变,但是那时我很忙。