javascript JSON请求正文在Express服务器中始终为空

ulydmbyx  于 2023-08-02  发布在  Java
关注(0)|答案(2)|浏览(118)

我正在建设一个小型服务器和网站与快递。现在我想用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,后端的主体总是空的。
我很沮丧

daolsyd0

daolsyd01#

在获取请求中将header属性更改为headers

0kjbasz6

0kjbasz62#

尝试res.status(200).json('Ok');

相关问题