Javascript 使用承诺链接http请求

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

在我的函数“reqHandler”中,我收集表单数据并将其传递到我的http.request中。为了链接请求,我声明了一个Promise和.then处理程序。问题是: 1.这会写入控制台“未处理的承诺拒绝(拒绝id:2):TypeError:无法读取未定义的属性“url” 2.看起来是这样的。然后没有被调用,所以没有进行API调用

代码:


最终,我的承诺有什么问题,然后呢任何帮助都将不胜感激

好的,我已经创建了一个测试环境,这里有一个源代码的抽象版本。 您的错误是将您的承诺封装在一个传递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);