问题描述
我有一个附加到pg数据库的Express应用程序。我正在处理错误。我希望将pg错误消息发送到前端,以便用户知道为什么此表单未发送。现在,如果我向该端点发送违反数据库约束的信息,则会关闭服务器。
我认为这与我处理错误的方式有关,但是我是新来表达的人,对如何解决这个问题有些困惑。
app.post('/api/inBox',inBox.createInBox)
const createInBox = (request,response) => {
const { name,email,body,tag,subject } = request.body
console.log("request body",request.body)
pool.query('INSERT INTO inBox (name,subject ) VALUES ($1,$2,$3,$4,$5)',[name,subject ],(error,results) => {
if (error) {
return console.error(err.message);
}
console.log("get to Success contact")
response.status(200).send(`InBox Added`)
})
}
解决方法
仅供参考,您的服务器可能正在关闭,因为您在err.message
中引用了console.error(err.message)
,但是变量名是error
,而不是err
。
您还需要将错误响应发送回客户端。服务器收到的每个http请求都需要发送某种类型的响应:
const createInbox = (request,response) => {
const { name,email,body,tag,subject } = request.body
console.log("request body",request.body)
pool.query('INSERT INTO inbox (name,subject ) VALUES ($1,$2,$3,$4,$5)',[name,subject ],(error,results) => {
if (error) {
console.error(error.message); // log correct variable
response.status(500).send(error.message); // send error response
return;
}
console.log("get to Success contact")
response.status(200).send(`Inbox Added`)
})
}
,
您的服务器正在关闭,因为您的回调函数引用的是error
而不是err
。
尝试以下代码:
const createInbox = (request,response) => {
const { name,subject } = request.body
console.log("request body",request.body)
pool.query('INSERT INTO inbox (name,(err,results) => {
if (err) {
return console.error(err.message);
} else
console.log("get to Success contact")
response.status(200).send(`Inbox Added`)
})
}