我是新来的节点js。
const http = require('http');
const url = require('url')
http.createServer(function (req, res) {
const { query, pathname } = url.parse(req.url, true)
let answer =[];
async () => {
await fetch('https://dummyjson.com/products').then(r => r.json()).then(d => {
answer.push(JSON.stringify(d))
})
}
res.writeHead(200, {
"Content-Type": 'text/html',
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Headers": "X-Requested-With"
});
res.end(answer);
}).listen(8080);
console.log('Server Started');
我试图保存在我的数组中的数据,一旦我得到的信息,我应该能够从该API呈现所有数据。
2条答案
按热度按时间at0kjp5o1#
您有以下几个问题:
1.包含
fetch()
的异步IIFE永远不会被调用。1.即使调用了它,您也不会等待它,而是尝试在
fetch()
完成之前发送响应。1.您正在尝试发送一个包含
res.end()
的数组(其中包含JSON)。您无法执行此操作。您需要发送文本。1.您将content-type设置为text/html,但尝试发送JSON。如果您实际上要发送JSON,则将content-type设置为
application/json
。变更为:
变更总结:
1.对
http.createServer()
的回调被标记为async
,因此我们可以在该回调函数中直接使用await
。1.删除
.then()
,只使用await
。不要混用await
和.then()
。选择一种风格或另一种。1.将Javascript数据而不是JSON推入数组。
1.对整个数组调用
JSON.stringify()
。你可以传递一个数组给res.end()
,你必须传递文本。1.将内容类型更改为
application/json
。wljmcqd82#
另一个调整是,您只希望数据被提取一次,您可以通过将data变量拉到模块级别并检查值来实现这一点:
如果你使用像lodash这样的函数,你可以记忆获取,或者你可以调用你自己的记忆函数。