当地居民在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。 它删除了关于options
和locals
所有警告。
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
,促使开发人员使用新的签名与locals
和options
分开(实际上是我谁加警告 )。
但是,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中一样。 我做了志愿者来做这个改变,但是那时我很忙。