我想为我的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请求。
- 尝试安装和使用
body-parser
- 将app.get()改为app.post()。但是如果您处理
/login
路径,使用.put()将是正确的。