【问题标题】:How can I receive a json in express server如何在快递服务器中接收 json
【发布时间】:2022-01-22 10:29:00
【问题描述】:

我需要在 React 中接收来自我前面的 JSON。但是 JSON 以一种奇怪的方式出现在我面前(一个带有字符串数据的对象),我不知道如何再次将它返回到 type 对象。

我发送这个。

const data = {
        email: 'emailc@email.com',
        password: 'test'
    }
    const options = {
        method: 'POST',
        body: JSON.stringify(data),
        mode: 'no-cors',
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    }

    const onsubmit = (e) => {
        //evitamos que se haga la peticion en automatico
        e.preventDefault();
        fetch('http://localhost:3001/user/signin',options)
        .then(res => res.json())
        .catch(error => console.error('Error:', error))
        .then(response => console.log('Success:', response));
        console.log('send on submit');
    }

我在快递服务器上得到了这个:

[Object: null prototype] {
  '{"email":"emailc@email.com","password":"test"}': ''
}

我的服务器是这样配置的:

const express = require('express');
const app = express();
const morgan = require('morgan');
const cors = require('cors');
const {mongoose} = require('./src/database/connection')

const Parser = require("body-parser").urlencoded({ extended: false });

//config
app.set('port', process.env.PORT || 3001);


//middlewares
app.use(morgan('dev'));
app.use(Parser);
app.use(cors()); //accepts connection from all directions

//Routes
app.use(require('./src/test'));
app.use(require('./src/routes/users'));

//Server
app.listen(app.get('port'), (req, res) => {
    console.log(`Server on port ${app.get('port')}`);
})

我认为我错误配置了正文解析器,请帮忙,这是我的第一个 API。

【问题讨论】:

  • 好吧,您发送了 JSON,但告诉服务器您发送的是 application/x-www-form-urlencoded... 这不是 JSON。

标签: javascript node.js reactjs rest express


【解决方案1】:
'Content-Type': 'application/x-www-form-urlencoded'

如果您告诉服务器您正在发送表单编码数据,那么它将尝试将您发送的内容解析为表单编码数据。

不要说谎。

如果您要发送 JSON,请这样说:

'Content-Type': 'application/json'

const Parser = require("body-parser").urlencoded({ extended: false });

您还需要一个支持 JSON 的正文解析器。

const Parser = require("body-parser").json();

但是 Express 有一个 built-in body parser 并且以大写字母开头的变量名传统上是为构造函数/类保留的。

const parser = express.json();

旁白:

mode: 'no-cors'

如果您正在发出跨域请求,那么它将破坏它。 如果您正在发出同源请求,那么这将无济于事。

删除它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-17
    • 2012-07-17
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    相关资源
    最近更新 更多