如何在nano(couchdb)Express.js中解决此错误

时间:2018-09-06 08:36:22

标签: angularjs express nano

  

(节点:7636)UnhandledPromiseRejectionWarning:错误:发送标头后无法设置标头。
      在validateHeader(_http_outgoing.js:491:11)
      在ServerResponse.setHeader(_http_outgoing.js:498:3)
      在ServerResponse.header    (C:\ Users \ username \ path \ Express \ node_modules \ express \ lib \ response.js:767:10)
      在ServerResponse.send(C:\ Users \ username \ path \ Express \ node_modules \ express \ lib \ response.js:170:12)
      在ServerResponse.json(C:\ Users \ username \ path \ Express \ node_modules \ express \ lib \ response.js:267:15)
      在ServerResponse.send(C:\ Users \ username \ path \ Express \ node_modules \ express \ lib \ response.js:158:21)
      在body.rows.forEach(C:\ Users \ username \ path \ Express \ app.js:41:15)
      在Array.forEach()
      然后在db.list.then(C:\ Users \ username \ path \ Express \ app.js:40:19)
      在
  (节点:7636)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。引发此错误的原因可能是抛出了一个没有catch块的异步函数,或者是拒绝了一个.catch()无法处理的承诺。 (拒绝ID:2)

以下是查询的代码:

app.get("/api/customers", (req, res, next) =>{
    res.header("Access-Control-Allow-Origin", "http://localhost");
    res.header("Access-Control-Allow-Methods", "GET, POST");
    res.writeHead(200, {'Content-Type': 'application/json'});
    
    db.list({ include_docs: true }).then((body) => {
        body.rows.forEach((doc) => {
          res.send(doc.doc);
        });
      });
  });

我想使用angularjs在html页面上显示数据。

我将不胜感激。

1 个答案:

答案 0 :(得分:0)

您正在尝试在循环内多次发送数据,因此出现该错误。 您为什么不发送如下的全身数据:

app.get("/api/customers", (req, res, next) =>{

    db.list({ include_docs: true }).then((body) => {
        res.send({data: body.rows});
    }).catch(e => {res.status(500).send({msg: 'Sorry, something went wrong'})});
  });

更新1

要启用CORS,请创建一个中间件并将其添加到您的应用中

//CORS middleware
var allowCrossDomain = function(req, res, next) {
    res.header('Access-Control-Allow-Origin', '*');
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
    res.header('Access-Control-Allow-Headers', 'Content-Type');

    next();
}

app.use(allowCrossDomain)