![](/img/trans.png)
[英]How to send JSON from server-side (nodejs) to client-side with Ajax?
[英]How to send API data from client-side to server-side [Nodejs]
我应该从服务器端的 2 个 API 获取数据。 我需要使用projectApi.projects[i].id
作为 User API Url 的 id 参数来调用 User API。
我确定server.js
和index.ejs
一定有错误。
我正在尝试打印:
(projectsApi.projects[i]).name
((JSON.stringify(usersApi.group)).user[j]).username
有什么办法可以使它成为可能吗?
项目API
网址: /projects?api_key=YOUR_API_KEY
{
"total":2000,
"projects":[
{
"id":123,
"user_id":435400,
"name":"Project Name"
},
...
]
}
用户接口
项目 ID = 123
网址:/projects/ 123 /group?api_key=YOUR_API_KEY
{
"total":1,
"group":[
{
"id":1,
"user":[
{
"id":435400,
"username":"User Name"
}
]
}
]
}
服务.js
const rp = require("request-promise");
app.get('/users', function (req, res) {
var id = req.params.id;
var url_project = '/projects' + apiKey;
var url_user = '/projects/' + id + '/group' + apiKey;
Promise
.all([rp({uri: url_project, json:true}), rp({uri: url_user, json:true})])
.then(([projectsApi, usersApi]) => {
res.render('index', {projectsApi, usersApi});
}).catch(err => {
console.log(err);
res.sendStatus(500);
});
});
索引.ejs
<% for (var i = 0; i < (projectsApi.projects).length; i++) { %>
<div><%= (projectsApi.projects[i]).name %></div>
<% for (var j = 0; j < (JSON.stringify(usersApi.group)).user).length; j++) { %>
<% if ((projectsApi.projects[i]).user_id == (JSON.stringify(usersApi.group)).user[j]).id) { %>
<div><%= ((JSON.stringify(usersApi.group)).user[j]).username%></div>
<% } %>
<% } %>
<% } %>
您的service.js
看起来不错。 我不会在ejs
模板中使用for
循环, ejs
简单地生成一个列表(在service.js
)并将其传递给模板。
Promise.all([rp({uri: url_project, json:true}), rp({uri: url_user, json:true})])
.then(([projectsApi, usersApi]) => {
let usersList = usersApi.group.map(g => g.user);
usersList = usersList.flat();
const finalList = [];
for (let i = 0; i < projectsApi.projects.length; i++) {
const object = {};
object.projectName = projectsApi.projects[i].name;
for (let j = 0; j < usersList.length; j++) {
if (projectsApi.projects[i].user_id === usersList[j].id) {
object.userName = usersList[j].username;
}
}
finalList.push(object);
}
res.render('index', {finalList});
}).catch(err => {
console.log(err);
res.sendStatus(500);
});
在您的模板中 -
<% for (var i = 0; i < finalList.length; i++) { %>
<div><%= (finalList[i]).projectName %></div>
<div><%= (finalList[i]).userName %></div>
<% } %>
编辑
看起来flat()
在这里不起作用,因为它还没有实现。 你可以做两件事之一
1) usersList = usersList.reduce((acc, val) => acc.concat(val), [])
2) 使用像lodash
这样的库,它提供了一个flatten()
方法
userList = _.flatten(userList)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.