我正在建设一个小型服务器和网站与快递。现在我想用JSON编码的简单凭证向Express服务器发送一个POST请求。
我的问题是,无论我尝试什么,我的请求主体在服务器端总是空的。我确信在前端的值在那里,我的代码console.logs
正确的用户名和密码,然后发送请求。而且我可以在Chrome开发工具的网络面板中看到发送到服务器的正确有效负载。
前端代码:
<script>
const username_input = document.getElementById('username');
const password_input = document.getElementById('password');
const submit_registration = document.getElementById('submit_registration');
submit_registration.addEventListener('click', (event) => {
const username = username_input.value;
const password = password_input.value;
console.log(username, password);
fetch('/register', {
method: 'POST',
header: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({
'username': username,
'password': password
})
})
.then(raw_response => raw_response.json())
.then(response => console.log(response))
.catch(err => console.log(err))
});
</script>
字符串
我也尝试过向我的服务器发送一个简单的POST请求。我使用的curl:
curl -H POST "Content-Type: application/json" -d '{"username":"xyz","password":"xyz"}' http://localhost:3000/register
型
我的服务器代码中的请求体又是空的。我猜问题出在后端的某个地方,但我不确定,所以我通过curl和fetch添加了Requests以确保问题的解决。下面是我处理POST请求的代码:
const express = require('express');
const app = express();
const port = 3000;
app.use(express.json());
app.post('/register', (req, res) => {
console.log(req.body);
res.status(200).send('Ok');
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
型
结果总是空的花括号,但假设其中有用户名和密码,就像上面的请求中发送的那样,我不明白为什么它总是空的。我的Express版本是4.17,所以express.json()应该可以工作。
我必须补充的是,当我使用一个html表单,通过application/x-www-form-urlencoded对数据进行编码,并在我的express应用程序中使用
app.use(express.urlencoded({ extended: true}))
型
成功了。我收到了用户名和密码,但现在使用JSON,后端的主体总是空的。
我很沮丧
2条答案
按热度按时间daolsyd01#
在获取请求中将
header
属性更改为headers
。0kjbasz62#
尝试res.status(200).json('Ok');