![](/img/trans.png)
[英]in Express JS , [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client , after adding a middleware
[英][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.