我正在尝试在Node JS Express应用程序中进行 axios呼叫,并将数据发送到我的index.ejs文件。 问题是我可以在我的callApijavascript文件中看到数据,但是我无法访问我的app.js中的响应(未定义的值)。
这是我的 app.js 文件中的相关代码:
//iNDEX pAGE RENDER
app.get('/', function (req, rep) {
var response = callApi.GetAll();
var users = response.users;
var activities = response.activities;
console.log('Users ' + users);
console.log('Activities ' + activities);
rep.render('index', {
users: users,
activities: activities
});
});
这是我的 callApi.js 这里的日志完美地返回了api数据
var GetAll = function () {
axios.all([
axios.get(initGet.uri + 'users/'),
axios.get(initGet.uri + 'activities/')
])
.then(axios.spread(function (userResponse, activitiesResponse) {
console.log('User', userResponse.data);
console.log('Activities', activitiesResponse.data);
return {
users: userResponse.data,
activities: activitiesResponse.data
};
}));
};
module.exports = {
GetAll: GetAll
};
当我运行index.ejs时,我的错误 {“错误”:{“消息”:“无法读取未定义的属性'用户'”}}
谢谢。
确实重复。
在阅读以下内容后:“如何返回异步调用的响应?” 回答我做了一个回调函数,它起作用了。
我的新 callApi.js:
const axios = require('axios');
const initGet = {
uri: 'http://localhost:3000/'
};
var apiCaller = function (cb) {
axios.all([
axios.get(initGet.uri + 'users/'),
axios.get(initGet.uri + 'activities/')
])
.then(axios.spread((userResponse, activitiesResponse) => {
/* console.log('User', JSON.stringify(userResponse.data));
console.log('Activities', JSON.stringify(activitiesResponse.data)); */
var data= {
users: userResponse.data,
activities: activitiesResponse.data
};
cb(data)
}))
};
var GetAll = function (cb) {
const users = apiCaller(cb);
const activities = apiCaller(cb);
return {
users: JSON.stringify(users),
activities: JSON.stringify(activities)
};
};
module.exports = {
GetAll: GetAll
};
非常感谢!