插入后无法返回正确的响应

我使用Node.js / Express.js来安装数据到我的MySQL数据库。 插入数据工作正常,但返回成功/失败给我一个错误。

TypeError: Cannot read property 'status' of undefined 

这是我的代码:

 var crud = { newProject: function (req, res, callback) { db.query('INSERT INTO projects SET ?', req.body, function(err, res) { // This is where it fails if(err){ return res.status(500).json({error: err}); } else { return res.status(200).json({success: 'Insert row success'}); } }); }, } // Express routing app.post('/project/*', crud.newProject); 

我不在这里?


所以这就是我以前的做法(把res改成resp后):

  if (err) throw err; res.end(JSON.stringify({response: 'Success'})); 

你的定义res两次。 快速响应对象正在被您的节点callback中的数据参数覆盖。

尝试以下(见评论)

 var crud = { newProject: function (req, res, callback) { // changed 'res' to 'resp' to avoid collision with Express' 'res' object db.query('INSERT INTO projects SET ?', req.body, function(err, resp) { // here's your error // This is where it fails if(err){ return res.status(500).json({error: err}); } else { return res.status(200).json({success: 'Insert row success'}); } }); }, } // Express routing app.post('/project/*', crud.newProject); 

如果您在主configuration中的最后一个app.use()之后定义了error handling中间件函数

 app.use(function (err, req, res, next) { res.status(500).send(err.message || 'Internal server error.') }) 

你可以使用nextcallback作为一个catchallerror handling程序,所以上面会变成

 var crud = { newProject: function (req, res, callback) { db.query('INSERT INTO projects SET ?', req.body, function(err, resp) { if (err) return callback(err); return res.json({success: 'Insert row success'}); }); }, } // Express routing app.post('/project/*', crud.newProject); 

res.json()默认情况下应该添加一个200 Success代码到响应头。 理想情况下,在检查err的状态以正确处理响应并相应地进行操作之后,尤其是在处理与通常在响应中提供的连续令牌相关的最后一个评估logging时,您会想要从节点callback中检查resp数据参数DBAL和API为你做,有些则不。 无论哪种方式,您都需要确保在成功响应之前,不需要额外的recursion来获取剩余的logging。

看起来像res对象是未定义的,因为插入后没有返回任何响应。 您可能会返回一个新的对象,如:

return { status: 200, json: {success: 'Insert row success'} }