Javascript 我似乎无法返回我想要返回的正确对象
我正在使用NodeJS和一些JS承诺尝试通过特定的web应用程序使用CMS。我正在尝试从CMSAPI获取一些数据,并且能够控制台.log()显示这些数据,它在控制台中显示得很好。虽然当我试图返回它时,它说对象是未定义的。我不确定我做错了什么。任何帮助都将不胜感激Javascript 我似乎无法返回我想要返回的正确对象,javascript,node.js,promise,Javascript,Node.js,Promise,我正在使用NodeJS和一些JS承诺尝试通过特定的web应用程序使用CMS。我正在尝试从CMSAPI获取一些数据,并且能够控制台.log()显示这些数据,它在控制台中显示得很好。虽然当我试图返回它时,它说对象是未定义的。我不确定我做错了什么。任何帮助都将不胜感激 module.exports = { services: async function(){ fetch( 'https://graphql.datocms.com/',
module.exports = {
services: async function(){
fetch(
'https://graphql.datocms.com/',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': `Bearer ${token}`,
},
body: JSON.stringify({
query: `{
service {
serviceName
serviceImg {
url
}
}
}`
}),
}
)
.then(res => res.json())
.then((res) => {
return res.data;
})
.catch((error) => {
console.log(error);
});
},
}
就像我说的,当我改为“console.log(res.data)”时,它表示未定义
const records = require('../public/records');
//root route
router.get('/', async (req, res) => {
res.render("landing", {serviceRecord: records.services()});
console.log(records.services());
});
这是我的路由部分代码
不要担心令牌变量是只读的
服务
需要返回
获取
。Fetch返回一个承诺,因此在调用render之前,应该在路由中处理承诺和响应
module.exports = {
services: () => fetch( /* your fetch code */)
}
// Then in your routes...
router.get('/', async (req, res) => {
const resp = await records.services()
const serviceRecord = await resp.json()
res.render("landing", { serviceRecord });
});
另外,有人提到只在服务函数中使用wait,这也是完全可行的
module.exports = {
services: async () => {
const response = await fetch( /* your fetch code */)
return await response.json()
}
}
// Then in your routes...
router.get('/', async (req, res) => {
const serviceRecord = await records.services()
res.render("landing", { serviceRecord });
});
您的
服务
函数不会返回
任何内容-只有promise回调才会返回。添加另一个return
以返回整个承诺链。或者,如果您已经将函数声明为async
,请删除所有then()
语法并使用wait
。您没有按照服务中的承诺做任何事情。返回res.data代码>哪儿也去不了。您有一个async
函数,但从不使用wait
。实际上,您可以通过返回fetch(
…)
…返回承诺
,但我不熟悉res.render
如何处理这个问题。从其他回答来看,似乎这正是应该做的。可能的重复也请不要显示代码的图像,只需复制并粘贴相关的代码片段到问题中。