繁体   English   中英

[ERR_HTTP_HEADERS_SENT]:发送到客户端后无法设置标头,expressjs

[英][ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client, expressjs

每次我尝试使用 express 的 function 路由器将数据插入我的 MySQL 数据库时,我都会出错。 好像我的服务器尝试发送两次响应,但我不知道在哪里。 这是错误:

throw err; // Rethrow non-MySQL errors
     ^
Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:526:11)
    at ServerResponse.header (C:\Users\makia\Documents\PERSO\projets\elengi\salon-user\server\node_modules\express\lib\response.js:771:10) 
    at ServerResponse.send (C:\Users\makia\Documents\PERSO\projets\elengi\salon-user\server\node_modules\express\lib\response.js:170:12)   
    at ServerResponse.json (C:\Users\makia\Documents\PERSO\projets\elengi\salon-user\server\node_modules\express\lib\response.js:267:15)   
    at Query.<anonymous> (C:\Users\makia\Documents\PERSO\projets\elengi\salon-user\server\src\bookingClient.js:24:36)
    at Query.<anonymous> (C:\Users\makia\Documents\PERSO\projets\elengi\salon-user\server\node_modules\mysql\lib\Connection.js:526:10)     
    at Query._callback (C:\Users\makia\Documents\PERSO\projets\elengi\salon-user\server\node_modules\mysql\lib\Connection.js:488:16)       
    at Query.Sequence.end (C:\Users\makia\Documents\PERSO\projets\elengi\salon-user\server\node_modules\mysql\lib\protocol\sequences\Sequence.js:83:24)
    at Query.ErrorPacket (C:\Users\makia\Documents\PERSO\projets\elengi\salon-user\server\node_modules\mysql\lib\protocol\sequences\Query.js:92:8)
    at Protocol._parsePacket (C:\Users\makia\Documents\PERSO\projets\elengi\salon-user\server\node_modules\mysql\lib\protocol\Protocol.js:291:23) {
  code: 'ERR_HTTP_HEADERS_SENT'
}

这是我的代码:

const express = require('express');

function createRouter(db) {
  const router = express.Router();

  router.post('/bookings/createbookings', (req, res, next) => {
    db.query(
          'insert into booking (idHairdresser,idClient,date,note,status,time,slot,city,address,price) values (?,?,?,?,?,?,?,?,?,?)',
        [req.body.idHairdresser, req.body.idClient, new Date (req.body.date), req.body.note, req.body.status, req.body.time, req.body.slot,req.body.city,req.body.address,req.body.price],
        (error) => {
          if (error) {
             res.status(500).json({status: 'error'});
        } else {
             res.status(200).json({status: 'ok'});
        }
      }
    );
    });

  return router;
}

module.exports = createRouter;

这是我连接数据库expressjs的源代码:

const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const mysql = require('mysql');
const hairdresser = require('./hairdresser');
const bookingHairdresser = require('./bookingHairdresser');
const bookingClient = require('./bookingClient');
const review = require('./review');
const prestation = require('./prestation');
const planning = require('./planning');



const connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'user',
  password : 'password',
  database : 'database'
});

connection.connect();

const port = process.env.PORT || 8080;

const app = express()
  .use(cors())
  .use(bodyParser.json())
  .use(bookingClient(connection))
  .use(hairdresser(connection))
  .use(bookingHairdresser(connection))
  .use(review(connection))
  .use(prestation(connection))
  .use(planning(connection));
  

app.listen(port, () => {
  console.log(`Express server listening on port ${port}`);
});

这是我在客户端执行的代码:

  createBookings(
    booking: Booking){
    return this.http.post(`${environment.serverUrl}/bookings/createbookings`, booking);
  }

如果您需要更多信息,我可以发送源代码的详细信息。 预先感谢您的所有支持:)

问题是您多次发送响应。 请发送源代码的详细信息,以便我查看

分明是Middleware带你折腾的案例。

bookingClient.js:24 中弹出错误。

唯一的可能性是 bookingClient(hairdresser, bookingHairdresser, bookingHairdresser, review, presentation & planning) 之后的任何路由器都有类似的路由 '/bookings/createbookings'。

如果是,您可能希望将 app.js 更新为 app.use('PATH_PREFIX', bookingClient)。 然后,bookingClient 中的路径将变为“PATH_PREFIX/bookings/createbookings”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM