【发布时间】:2014-12-05 00:16:59
【问题描述】:
在lot of great help from user Jobsamuel 之后,我在获取我试图从 API 调用中获取的数据以显示在浏览器中时遇到了一些困难:
// An express route.
app.get('/activities', function (req, res) {
if (req.user !== null) {
// User is authenticated.
getUserActivities(req.user.id, res);
} else {
// Redirect to login the user isn't authenticated.
res.redirect('/login');
}
});
// This function will make API calls to Fitbit
// using the User ID we got from the PassportJS
// authentication process.
function getUserActivities(id, res) {
// It will request from Fitbit User activities.
request('https://api.fitbit.com/1/user/'+ id +'/activities/',
function (error, response, body) {
if (!error && response.statusCode == 200) {
// If everything goes well.
return res.send(body);
} else {
// If something wrong happens.
return res.send(error);
}
}
);
}
我想在使用 EJS 的网页上显示body,我尝试过这样的操作:<%= this.body %>。页面在浏览器中呈现,但变量显示为undefined。我在这里做错了什么?我认为这只是一个语法问题,但我觉得好像我错过了一个步骤。
编辑:我打电话给res.render()的代码:
app.get('/', function(req, res){
res.render('index', { user: req.user}, {body : body});
});
app.get('/account', ensureAuthenticated, function(req, res){
res.render('account', { user: req.user });
});
app.get('/login', function(req, res){
res.render('login', { user: req.user });
});
编辑 2:index.ejs 的相关部分
<body>
<% if (!user) { %>
<h2>Welcome! Please log in.</h2>
<% } else { %>
<!-- <h2>Hello, <%= user.displayName %>.</h2> -->
<div id="wrapper">
<div id="blank"></div>
<div id="content">
<div id="info">
Output: <%= this.body %>
</div>
</div>
</div>
<% } %>
</body>
更新:问题仍然存在。我感觉要放弃这个了。这里肯定少了点什么,对吧?
【问题讨论】:
-
您的
<%= this.body %>在哪个模板中?该模板是在前端呈现的,还是在服务器端某处执行res.render()? -
它在
index.ejs,我已经在服务器上渲染了。如果有帮助,我可以发布该代码。 -
好的,你在哪里打电话给
res.render('index')?听起来您需要将body传递给res.render('index', { body: body })而不是res.send(body),后者只是将文本发送到浏览器而不是通过模板。此外,您可能希望将this.body更改为body。 -
您只能将一个变量对象传递给
render()。这意味着你应该使用这个:res.render('index', { user: req.user, body: body});。之后,您只需要确保在该路由之前的某些中间件中设置res.locals.body,否则您应该在该路由中获取body,但是您想这样做。
标签: javascript node.js express ejs