Javascript 使用承诺链接http请求
在我的函数“reqHandler”中,我收集表单数据并将其传递到我的http.request中。为了链接请求,我声明了一个Promise和.then处理程序。问题是: 1.这会写入控制台“未处理的承诺拒绝(拒绝id:2):TypeError:无法读取未定义的属性“url” 2.看起来是这样的。然后没有被调用,所以没有进行API调用 代码:Javascript 使用承诺链接http请求,javascript,node.js,http,promise,es6-promise,Javascript,Node.js,Http,Promise,Es6 Promise,在我的函数“reqHandler”中,我收集表单数据并将其传递到我的http.request中。为了链接请求,我声明了一个Promise和.then处理程序。问题是: 1.这会写入控制台“未处理的承诺拒绝(拒绝id:2):TypeError:无法读取未定义的属性“url” 2.看起来是这样的。然后没有被调用,所以没有进行API调用 代码: 最终,我的承诺有什么问题,然后呢任何帮助都将不胜感激好的,我已经创建了一个测试环境,这里有一个源代码的抽象版本。 您的错误是将您的承诺封装在一个传递req和r
最终,我的承诺有什么问题,然后呢任何帮助都将不胜感激好的,我已经创建了一个测试环境,这里有一个源代码的抽象版本。 您的错误是将您的承诺封装在一个传递req和res参数的函数中,并且您必须在您的承诺中调用resolve或reject,这在很多地方都被遗忘了 此源已测试
const http = require('http');
const reqHandler = (req, res) => {
return new Promise((resolve, reject) => {
if (req.url === "/") {
switch (req.method.toLowerCase()) {
case "get":
console.log('get');
return resolve('get');
case "post":
console.log('post');
return resolve('post');
default:
return resolve('default');
}
} else {
return resolve('some thing else');
}
});
};
const myReqHandler = (req, res) => {
reqHandler(req, res).then(()=> {
console.log('then reached')
});
}
const PORT = 8089;
const server = http.createServer();
server.on("error", (err) => console.error(err));
server.on("request", myReqHandler);
server.on("listening", () => console.log(`Start HTTP on port ${PORT}`));
server.listen(PORT);
你看到的问题是什么?快速建议。您可以使用
request promise
库,它是请求模块的包装,而不是测试如果(req.url==“/”
和case“get”/case“post”
,您应该实现一个路由器app.get(“/”),app.post(“/”)
,不是吗?reqHandler()
需要两个参数,但您调用它时没有参数。我想知道为什么在构建节点应用程序时不允许使用Express,但您忘记为get方法设置resolve
。您刚刚在那里拒绝了。所以你的get方法永远不会成功。所以不会调用。根据我的任务调整您的代码,promise及其处理程序没有问题。下一次我会更小心地解决和拒绝问题。。非常感谢。
const http = require('http');
const reqHandler = (req, res) => {
return new Promise((resolve, reject) => {
if (req.url === "/") {
switch (req.method.toLowerCase()) {
case "get":
console.log('get');
return resolve('get');
case "post":
console.log('post');
return resolve('post');
default:
return resolve('default');
}
} else {
return resolve('some thing else');
}
});
};
const myReqHandler = (req, res) => {
reqHandler(req, res).then(()=> {
console.log('then reached')
});
}
const PORT = 8089;
const server = http.createServer();
server.on("error", (err) => console.error(err));
server.on("request", myReqHandler);
server.on("listening", () => console.log(`Start HTTP on port ${PORT}`));
server.listen(PORT);