问题描述
请求服务器时,使用 POST 请求给服务器传送数据,在服务器路由规则 app.all() 中无法使用 request.body.xxx 拿到具体的数据
原因分析:
在发送 POST 请求的时候,要注意是否发送了预检请求。服务器端的路由规则 app.all() 会处理预检请求(OPTIONS请求),若是在预检请求中使用 request.body.xxx 自然是拿不到正式请求的请求体中的数据。
解决方案:
在路由规则中判断是不是POST请求,若是POST请求则可以使用 request.body.xxx 拿数据。
若不是 POST 请求也要发送 response.send() !!!,否则任何请求都不会有 response 响应!!!
如下示例:
app.all('/app/login-authentication', async function (request, response) {
// 设置允许跨域
response.setHeader('Access-Control-Allow-Origin', '*')
response.setHeader('Access-Control-Allow-Headers', '*')
// 判断是预检请求还是正式请求,如果是 POST 请求,则是真正的用户请求,进行登录验证
if (request.method === 'POST') {
// 获取待验证的 “用户名” 和 “密码”
const username = request.body.username
const password = request.body.password
// 进行登录验证
User.findOne({ username: username })
.then(value => {
if (value.password === password) {
// 用户输入的密码和数据库中的密码相同
response.send(JSON.stringify({ status: 1, msg: '验证成功' }))
} else {
// 用户输入的密码和数据库中的密码不同
response.send(JSON.stringify({ status: 0, msg: '用户名或密码错误' }))
}
})
.catch(error => {
// 请求数据库发生错误
response.send(JSON.stringify({ status: 0, msg: '验证失败' }))
})
} else {
response.send('') // 非常重要!!!!!!!!!!!
}
})