Данные ответа в почтальоне имеют несколько дополнительных символов - PullRequest
1 голос
/ 06 ноября 2019

Я использую postgresql и узел для создания приложения crud. У меня проблемы с отправкой почтовых запросов на сервер. Я попытался проверить данные ответов на почтальоне, но в данных json есть некоторые дополнительные символы.

Я попытался вставить данные непосредственно в приложение, и оно работает. Я также попытался использовать x-www-form-urlencoded, и это работает. Проблема возникает, когда я пытаюсь публиковать сообщения с использованием raw в почтальоне.

const express = require('express');
const app = express();
const pg = require("pg");
const bodyParser = require('body-parser');

app.use((req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', '*');
    res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
    res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
    next();
});

app.use(bodyParser.urlencoded({ extended: true }));

app.use(bodyParser.json());

const connectionString = "postgres://postgres:dennis@localhost:5432/School";
const pool = new pg.Pool({
    connectionString: connectionString
});

// app.use(express.json());

app.get('/', (req, res, next) => {

    pool.connect((err, client, done) => {
        if (err) {
            console.log("not able to connect " + err);
            res.status(400).send(err);
        }
        client.query("select * from student where id= $1", [1], (err, result) => {
            done();
            if (err) {
                console.log(err);
                res.status(400).send(err);
            }
            res.status(200).send(result.rows);
        })
    })
})

app.get('/students', (req, res, next) => {
    pool.connect((err, client, done) => {
        if (err) {
            console.log('error while connecting ' + err)
            res.status(400).send(err);
        }
        client.query("select * from student", (err, result) => {
            done();
            if (err) {
                console.log(err)
                res.status(400).send(err)
            }
            res.status(200).send(result.rows)
        })
    })
})

app.post('/add', (req, res, next) => {
    pool.connect((err, client, done) => {
        if (err) {
            console.log(err)
            return res.status(400).send('could not connect ' + err);
        }

        client.query("insert into student (id, name, rollnumber) values($1, $2, $3)", [req.body.id, req.body.name, req.body.rollnumber], (err, result) => {
            done();
            if (err) {
                return console.log(err)
            }

            res.json({
                message: req.body
            })
        })
    })
})

app.listen(4000, () => {
    console.log('working');
})

Это то, что я получаю от req.body в postman. Данные JSON содержат несколько забавных символов.

{
    "message": {
        "{\r\n        \"id\": \"1\",\r\n        \"name\": \"jjjj\",\r\n        \"rollnumber\": \"7788\"\r\n    }": ""
    }
}

Это то, что я ожидаю получить {"id": "1", "name": "jjj", "rollnumber": "7788"}

Ответы [ 3 ]

0 голосов
/ 06 ноября 2019

Пожалуйста, проверьте этот код,

req.body больше не является строкой JSON. Итак, сначала вам нужно stringify и parse it.

res.json({
        message: JSON.parse(JSON.stringify(req.body))
})
0 голосов
/ 06 ноября 2019

В почтальоне при отправке тела запроса json выберите application / json . Вы используете текст сейчас.

0 голосов
/ 06 ноября 2019

Пожалуйста, измените тип запроса. Теперь вы отправляете его в текстовом формате, но вам нужно отправить его в формате json.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...