我试图通过将一个对象转换为JSON,其中JSON数据在控制台上显示,但尝试传递它显示错误时,尝试使用res.send("filename.ejs",data
将数据从js文件(sample.js)传递给ejs
TypeError:无法在字符串上创建属性“_locals”
有人可以帮助解决这个问题并告诉我如何在ejs文件中调用它们
res.send()用于发送数据,不需要指向ejs文件
res.send将数组作为参数(res.send([body])),您可以在{{data}}之类的ejs中获取它
例如
NODEJS res.send({message:'hello'})
filename.ejs
<div>{{ message }}</div> or <%= JSON.stringify(message) %>
另外Express 5x不支持你可以使用的res.send()
方法
res.status(200).send({message: 'hello})
(你不承认你表达版本)
请注意,您不应在.ejs
中使用res.render
扩展,尽管您的问题的其他答案表明您这样做。
当你调用res.render('myView')
时,ejs会在名为myView.ejs
的文件夹中查找名为views
的模板(它被设置为ejs使用的默认文件夹)
例如:
res.render('myView.ejs',{
data:data,
foo:'foo'
});
ejs将寻找一个名为myView.ejs.ejs
的视图(或者它可能只是完全失败)。
要访问模板上的数据,您需要执行以下操作:
app.js:
app.get('/somePathHere', function(req, res) {
res.render('myView',{
data:data,
foo:'foo'
});
});
myView.ejs:
<% data.forEach(function(item) { %>
//do something
<% }); %>
<%= foo %>
请注意,访问变量时,使用<%= varNameHere %>
,在编写任何类型的函数时,您将省略=
。
您正在向视图发送数据,因此请使用此更新代码并尝试
res.render("filename",{
data:"hello"
});
或者您可以传递整个数据
res.render("filename",{data:data});
在你的ejs文件中,像这样访问它
<div> <%= data %> <div>