数据库更新成功,但API返回500错误
问题描述:
我目前正在使用Javascript与Node.js,Express,SuperAgent和KnexJS(Sqlite3的数据库框架)的项目。我的问题是这样的:数据库更新成功,但API返回500错误
当我提交的数据使用PUT方法通过我的API路由更新,我的数据库已成功更新,但我的控制台返回此错误:
PUT http://localhost:3000/user/contracts/ 500 (unknown)
Error: unknown
at Request.<anonymous> (client.js:423)
at Request.Emitter.emit (index.js:133)
at XMLHttpRequest.xhr.onreadystatechange (client.js:735)
下面是一些片断我API,路由和DB代码。
api.js
const request = require('superagent')
const updateUserContract = (callback, id, contractData) => {
request
.put('http://localhost:3000/user/contracts/' + id)
.set('Content-Type', 'application/json')
.send(contractData)
.end(function (err, res) {
if (err) {
callback(err)
} else {
callback(null, "Status: 200")
}
})
}
module.exports = { updateUserContract }
routes.js
router.put('/contracts/:id', function (req, res) {
var id = req.params.id
var signatureUrl = req.body.signature_url
db.signContract(id, signatureUrl).then((result) => {
res.sendStatus(result)
})
.catch((err) => {
res.status(500).send(err)
})
})
db.js
function signContract (id, signatureUrl) {
return knex('contracts').where('id', id)
.update({ signature_url: signatureUrl }).into('contracts')
}
答
被@Sombriks回答。 “关于你的错误,你正在发送sql状态,就好像它处于http状态的位置,我最好的猜测是,它被”提升“为错误500.尝试简单地req.send(”OK“),它会传递状态200作为默认“。
检查您的服务器日志,找出500错误的原因。 – Barmar
@Barmar我刚接受检查。对不起,还有一个新的学位。我没有看到有关错误的任何信息。这是我回来的。 '表示:路由器调度PUT /用户/合同/ 21 + 3S 快递:路由器查询:/用户/合同/ 21 + 2ms的 快递:路由器expressInit:/用户/合同/ 21 + 0毫秒 快递:路由器jsonParser:/user/contracts/21 + 0ms express:router serveStatic:/ user/contracts/21 + 0ms express:router路由器/用户:/user/contracts/21 + 0ms express:router dispatch PUT/contracts/21 + 0ms' –
剥离“.into('contracts')”,您已经在knex(“contracts”) – Sombriks