Node.js 收到未捕获错误:整数:"NaN" 类型的输入语法无效



我是JS的新手,我试图使用node.js创建一个API,但是我得到了错误:

Uncaught error: invalid input syntax for type integer: "NaN"

请求是好的,当我做一个GET和POST请求,但我有麻烦的PUT和DELETE。我得到相同的错误与两个请求。下面是我的代码:

const getProfiles = (request, response) => {
pool.query('SELECT * FROM profiles', (error, results) => {
if (error) {
throw error
}
response.status(200).json(results.rows)
})
}
const addProfiles = (request, response) => {
const {name, bio} = request.body
pool.query(
'INSERT INTO profiles (name, bio) VALUES ($1, $2) RETURNING id',
[name, bio],
(error) => {
if (error) {
throw error
}
response.status(201).json({status: 'success', message: 'Profile added.'})
})

}
const updateProfiles = (request, response) => {
const id = parseInt(request.params.id)
const {name, bio} = request.body
pool.query(
'UPDATE profiles SET name = $1, bio = $2 WHERE id = $3 RETURNING id',
[name, bio, id],
(error) => {
if (error) {
throw error
}
response.status(202).json({status: 'success', message: 'Profile updated with ID: ${id}'})
})
}
const deleteProfiles = (request, response) => {
const id = parseInt(request.params.id)
pool.query(
'DELETE FROM profiles WHERE id = $1', [id],
(error, results) => {
if (error) {
throw error
}
response.status(203).send(`Profile deleted with ID: ${id}`) 
})
}
app
.route('/profiles')
// GET endpoint
.get(getProfiles)
// POST endpoint
.post(addProfiles)
//UPDATE endpoint
.put(updateProfiles)
// DELETE endpoint
.delete(deleteProfiles)

// Start server
app.listen(process.env.PORT || 3002, () => {
console.log(`Server listening`)
})

我对这个非常陌生,如果你发现我哪里错了,我会非常感激和解释为我更好地理解它,永远不会再犯这个错误。谢谢你。

据我所知,req.param .id是未定义的,因为您没有告诉express路由应该接收param。

改变:

app
.route('/profiles')
// GET endpoint
.get(getProfiles)
// POST endpoint
.post(addProfiles)
//UPDATE endpoint
.put(updateProfiles)
// DELETE endpoint
.delete(deleteProfiles)

:

app
.route('/profiles')
// GET endpoint
.get(getProfiles)
// POST endpoint
.post(addProfiles)
app
.route('/profiles/:id')  // :id means we are expecting that param
//UPDATE endpoint
.put(updateProfiles)
// DELETE endpoint
.delete(deleteProfiles)

当您执行PUT或DELETE请求时,端点应该看起来像这样:/profiles/

错误说明您提供的是一个"非数字";(NaN),你的应用程序需要一个数字(整数)。它很可能是updateProfiles或deleteProfiles中的id,因为你还没有在路由中定义它

app
.route('/profiles/:id')
// GET endpoint
.get(getProfiles)
// POST endpoint
.post(addProfiles)
//UPDATE endpoint
.put(updateProfiles)
// DELETE endpoint
.delete(deleteProfiles)

最新更新