从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);
答案 0 :(得分:1)
tl; dr:升级到最新版本的EJS。它会删除有关options
和locals
的所有警告。
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
,我们也会打印警告,敦促开发人员使用新签名locals
和options
分开(实际上是me who added the warning)。
但是,Express.js用户在调用约定方面没有选择权,因此Express.js中始终存在警告。
首先,@ 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之后释放)。
options
和locals
分开interested,就像在EJS v2中一样。我做志愿做出改变,但后来我很忙,所以是的。