如何在Express中从请求中获取数据



我想为我的web应用程序建立一个登录页面,我想使用fetch将数据发送到我的express服务器,但当我将req记录到控制台的"req.body"是一个空对象,即使我发送了一个带有名称和密码属性的对象,有人能帮助吗

client_side代码:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<input type="text" id="name" name="name" />
<input type="password" id="password" name="password" />
<button onclick="send()">login</button>
<script>
async function send() {
let name = document.getElementById('name').value
let password = 
document.getElementById('password').value
let res = await 
fetch('http://localhost:3000/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name,
password                    
})
})
if(res.redirected) {
window.location.href = "/chat"
localStorage.setItem('name', name)
localStorage.setItem('password', password)
} else {
alert('not correct :P')
}
}
</script>
</body>          
</html>   

server_side代码:

app.use(express.urlencoded({ extended: true })); 
app.post('/api/login', (req, res) => {
console.log(req.body)
// why the output is an empty object {}
res.redirect('/login')
})

我是一个前端开发和新的后端#编辑:我的服务器代码是app.post(),但我不小心把app.get() #,因为我重写了服务器代码,而不是粘贴它

首先,将app.get更改为app.post以处理post请求。

第二,添加内置的JSON body解析器来正确添加"body"属性设置为请求对象。app.use(express.json())

要更健壮地处理身份验证,请使用passportjs。

尝试app.post代替app.get。见https://expressjs.com/en/guide/routing.html

你的javascript正在执行HTTP POST请求,但是express只处理HTTP GET请求。

  1. 尝试安装和使用body-parser
  2. 将app.get()改为app.post()。但是如果您处理/login路径,使用.put()将是正确的。

相关内容

  • 没有找到相关文章

最新更新