var mysql = require('mysql');
var express = require("express");
var router = express.Router();
var mysqlPool = mysql.createPool({...});
router.post("/", function(req, res, nxt) {
req.assert('email', 'Valid email required').notEmpty().isEmail();
var errors = req.validationErrors(true);
if (errors) {
mysqlPool.getConnection(function(err, conn) {
if(err) return nxt(err);
conn.query( 'SELECT * FROM guestbook', function( err, result ) {
conn.release();
return res.render("index", {signs: result, errors: errors || {}})
});
});
}
mysqlPool.getConnection(function(err, conn) {
if(err) return nxt(err);
conn.query( 'INSERT INTO guestbook ( name, email, message ) VALUES ( ?, ?, ? )',
[ req.body.name, req.body.email, req.body.message ],
function( err, result ) {
conn.release();
req.flash( 'success_msg', 'Successfully signed guestbook' );
res.redirect( "/" );
});
});
});
您好,我是node.js的新手
这是我面临的问题,如果有验证错误,此代码将生成Can't set headers after they are sent
我完全清楚为什么会发生这种情况
这是因为mysqlPool.getConnection
中的异步回调被注册,然后流程在它之后直接继续到下面的代码
要解决此问题,我添加return
声明
if (errors) {
return mysqlPool.getConnection(function(err, conn) {...});
}
return mysqlPool.getConnection(function(err, conn) {...});
是的,它确实解决了我的问题
但我觉得它有问题。
有没有更好的方法来解决这类问题?