Javascript 将数据从服务器发送到客户端节点
我有这段代码,它允许我获取用户在我的数据库中发布的所有帖子。问题是我试图将数据发送到前端(客户端)。但我没有成功,我不知道我错过了什么 下面是从mongoDB中提取用户信息的代码。t代码工作正常,没有问题Javascript 将数据从服务器发送到客户端节点,javascript,node.js,mongodb,ejs,Javascript,Node.js,Mongodb,Ejs,我有这段代码,它允许我获取用户在我的数据库中发布的所有帖子。问题是我试图将数据发送到前端(客户端)。但我没有成功,我不知道我错过了什么 下面是从mongoDB中提取用户信息的代码。t代码工作正常,没有问题 User.find({}).lean(true).exec((err, users) => { let userMap = []; userMap.push({ user: users[i], posts: users[i].posts[j] });
User.find({}).lean(true).exec((err, users) => {
let userMap = [];
userMap.push({ user: users[i], posts: users[i].posts[j] });
//all the data are stored to userMAP :[{user : xxxxx ,posts : {the posts are here}}]
}
}
}
console.log(userMap);
User.findOne({ userName: req.user.userName }, (error, req_user) => {
console.log(req.user.lastLogin)
let lastSeen = ta.ago(req.user.lastLogin);
//console.log(posts)
res.render('home', { // this part for rendering the homePage and send data
user: req_user,
people: users,
userMap: userMap.reverse()
});
});
我在客户端代码中尝试的是:
<div class="container">
<% for(var x=0;x<user.posts.length;x++) { %>
<div class="jumbotron">
<div>by
<b>{{ user.posts[x].author }}</b>
on
<small>{{ user.posts[x].createdAt }}</small>
</div>
<div>
<p>{{ user.posts[x].caption }}</p>
</div>
<div class="row">
<button onclick="actOnPost(event);"
data-post-id="{{ this.id }}">Like
</button>
<span id="likes-count-{{ this.id }}">{{ this.likes_count }}</span>
</div>
</div>
<% } %>
在客户端显示数据的任何帮助或更好的解决方案
非常感谢,该模板的源代码正在浏览器中呈现。这意味着视图引擎没有对其进行解析 默认视图引擎是Jade,但您没有使用Jade 可能你忘了:
Hi@odegeek到目前为止,我们看到的是如何从数据库中获取数据,以及如何在视图中显示数据的想法。但是我们这里缺少一些信息。例如:
- 如果有的话,您正在使用哪个前端框架
- 您在哪里调用后端端点
- 您正在使用哪个视图引擎
- 前端向后端请求数据
- 一旦响应到达浏览器,您将进行某种解析/映射,以使其适应您的需要
- 然后将其传递到视图进行渲染。现在取决于您使用的前端框架/视图引擎。呈现数据的代码会有所不同
我希望这能让你了解你需要提供/做什么。。谢谢,这不是在ejs中显示数据的语法,试试这个。看到这些了吗
Hello,谢谢你的回答,不@Quentin我已经在我的app.js
app.use(expressLayouts)中使用了它;应用程序集(“查看引擎”、“ejs”)代码>…页面生成良好,但服务器和客户端之间的数据通信不正常,,,,可能需要添加JS脚本?您能提供一个小的repo,我们可以重现问题吗?我可以提供我的主页文件。ejs
对您合适吗?或者你需要整个项目吗?如果你能准备一个小项目,也许只是与你的问题相关的文件,我可以看看。如果没有更好的答案,我很难告诉你出了什么问题picture@orlaqp我只是接受下面的解决方案,谢谢您的时间,祝您愉快,如预期的那样工作。最后一个问题是.html部分是一样的,还是这只适用于ejs?不,您不能将这些标记用于.html extensions@Nodegeek。请接受答案如果这样做有效,是否可以给我一个html部分的链接:-D,对不起
router.get('/home', (req, res) => {
if (req.user.id) {
console.log(req.user.id)
User.find({}).lean(true).exec((err, users) => {
let userMap = [];
app.set('view engine', 'whatever template engine you are trying to use')
<% for(var x=0;x<user.posts.length;x++) { %>
<div class="jumbotron">
<div>by
<b><%= user.posts[x].author %></b>
on
<small><%= user.posts[x].createdAt %></small>
</div>
<div>
<p><%= user.posts[x].caption %></p>
</div>
<div class="row">
<button onclick="actOnPost(event);"
data-post-id="<%= this.id %>">Like
</button>
<span id="likes-count-<%= this.id %>"><%= this.likes_count %></span>
</div>
</div>
<% } %>