Nodejs / Express – 错误:发送后无法设置标头

相当新的节点/expression。 我正在检查用户(通过用户名)是否已经存在于数据库中,如果他们已经存在,就会发出错误。

当我使用curl来尝试将其closures时,我得到以下错误:

错误:发送后无法设置标题。

我已经知道,我所做的第一个检查是为了确保所有的字段都被正确填写,并且不会多次设置标题。

任何帮助将不胜感激。

(我的相关代码如下,如果你需要其他的东西,可以这么说!)

router.post('/register', function(req, res, next) { if(!req.body.username || !req.body.password){ return res.status(400).json({ message: 'Please fill out all fields.' }); } User.count({ username: req.body.username}, function(err, count){ console.log(count); if(count > 0) { return res.status(400).json({message: 'This user already exists!' }); } }); var user = new User(); user.username = req.body.username; user.setPassword(req.body.password); user.save(function(err) { if(err) { return next(err); } return res.json({ token: user.generateJWT()}); }); }); 

当你在User.count和user.save中返回的时候,你只是从callback中返回而不是整个方法。

在一个地方发送回复是一个很好的做法。 在方法的结尾。 在此之前,评估您的条件,并在一些variables中设置响应代码和响应消息。 您可以使用它来发送响应作为最后一步。

现在试试这个解决方法:

  router.post('/register', function(req, res, next) { if(!req.body.username || !req.body.password) { return res.status(400).json({ message: 'Please fill out all fields.' }); } User.count({ username: req.body.username}, function(err, count) { console.log(count); if(count > 0) { return res.status(400).json({message: 'This user already exists!' }); } else { var user = new User(); user.username = req.body.username; user.setPassword(req.body.password); user.save(function(err) { if(err) { return next(err); } return res.json({ token: user.generateJWT()}); }); } }); }); 

把所有的代码放在User.count的callback函数中,否则执行两部分代码

  router.post('/register', function(req, res, next) { if(!req.body.username || !req.body.password){ return res.status(400).json({ message: 'Please fill out all fields.' }); } User.count({ username: req.body.username}, function(err, count){ console.log(count); if(count > 0) { return res.status(400).json({message: 'This user already exists!' }); } var user = new User(); user.username = req.body.username; user.setPassword(req.body.password); user.save(function(err) { if(err) { return next(err); } return res.json({ token: user.generateJWT()}); }); }); });