错误ejs未定义?

问题描述 投票:0回答:3

我正在使用ejs,并且我有以下代码。

app.get('/profile/:name',function(req,res){
var data={
age: 29,
job:'ninja'
 };
 var ejsData={
data:data,
person:req.params.name
};
res.render('profile',ejsData);
});

使用以下 ejs 文件

<!doctype html>
<html>
<head>
<style>
body{background: skyblue;font-family: verdana;color: #fff;padding: 
30px;}
h1{font-size: 48px;text-transform: uppercase;letter-spacing: 2px;text- 
align: center;}
p{font-size: 16px}


</style>
</head>
<body>
<h1>Profile Page <%= ejsData.person %></h1>
<p>The Age of the Person is <%= ejsData.data.age %> </p>
<p>He works as a <%= ejsData.data.job %> </p>
</body>
</html>

但是我一直收到这个错误?我做错了什么?

javascript node.js compiler-errors ejs
3个回答
0
投票

引用传递到模板中的对象的属性而不是对象本身,即

<h1>Profile page <%= person %>
<p>The age of the person is <%= data.age %> </p>
...

如果您想直接引用该对象,那么您需要将其作为属性传递

res.render("profile", { ejsData }):

0
投票

为了匹配 ejs 网页快速启动示例的约定,请更改对 render 的调用,使 ejsData 成为传入对象的属性:

res.render('profile', {ejsData: ejsData}); 

可能更干净一点,也许可以更好地说明正在发生的事情,只需从 ejs 文件中删除字符串“ejsData”(不要更改 res.render 调用):

<!doctype html>
<html>
<head>
<style>
body{background: skyblue;font-family: verdana;color: #fff;padding: 
30px;}
h1{font-size: 48px;text-transform: uppercase;letter-spacing: 2px;text- 
align: center;}
p{font-size: 16px}


</style>
</head>
<body>
<h1>Profile Page <%= person %></h1>
<p>The Age of the Person is <%= data.age %> </p>
<p>He works as a <%= data.job %> </p>
</body>
</html>

当您的代码出现在您的帖子中时,ejsData 只是传递给渲染的变量的名称。渲染函数和您提供的 ejs 模板不会知道有关该变量名称的任何信息(除非您将其作为传入对象的属性,如第一个示例中所示)。


0
投票

问题的可能原因可能与您的路线有关。返回您的路线并检查您的“ejsData”变量是否放置在正确的路线上。 EJS 非常具体。

例如,如果您将“ejsData”变量放在路由“/a”中并在路由“/b”中调用它,那么EJS可能找不到该变量是有道理的。

© www.soinside.com 2019 - 2024. All rights reserved.