Как я могу решить эту ошибку в nano (couchdb) Express.js - PullRequest
0 голосов
/ 06 сентября 2018

(узел: 7636) UnhandledPromiseRejectionWarning: Ошибка: невозможно установить заголовки после их отправки.
at validateHeader (_http_outgoing.js: 491: 11)
в ServerResponse.setHeader (_http_outgoing.js: 498: 3)
в ServerResponse.header (C: \ Users \ имя пользователя \ путь \ Экспресс \ node_modules \ экспресс \ Lib \ response.js: 767: 10)
at ServerResponse.send (C: \ Users \ имя пользователя \ path \ Express \ node_modules \ express \ lib \ response.js: 170: 12)
в ServerResponse.json (C: \ Users \ имя пользователя \ path \ Express \ node_modules \ express \ lib \ response.js: 267: 15)
at ServerResponse.send (C: \ Users \ имя пользователя \ path \ Express \ node_modules \ express \ lib \ response.js: 158: 21)
в body.rows.forEach (C: \ Users \ имя пользователя \ path \ Express \ app.js: 41: 15)
в Array.forEach ()
в db.list.then (C: \ Users \ имя пользователя \ path \ Express \ app.js: 40: 19)
в
(узел: 7636) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри асинхронной функции возникла ошибка без блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). (код отклонения: 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);
        });
      });
  });

Я хочу показать данные на html-странице, используя angularjs.

Любая помощь, которую я действительно ценю.

1 Ответ

0 голосов
/ 06 сентября 2018

Вы пытаетесь отправить данные несколько раз внутри цикла, отсюда и ошибка. Почему бы вам не отправить данные всего тела, как показано ниже:

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)
...