Метод Express Post не может прочитать свойство 'toString' - PullRequest
1 голос
/ 05 июля 2019

У меня есть экспресс-сервер со следующим почтовым вызовом:

app.post('/api/guitars/' , function(req, res){
    const body = req.body;
    //var inputGuitar = new Guitar(body.guitarMake.toString(), body.guitarModel.toString(), body.guitarSerial.toString(), body.guitarColour.toString(), body.guitarOwnerId.toString(), body.guitarYear.toString());
    db.query(`INSERT INTO Guitar (GuitarMake, GuitarModel, GuitarSerial, GuitarColour, GuitarOwnerId, GuitarYear) VALUES (?, ?, ?, ?, ?, ?)`,
    [body.guitarMake.toString(), body.inputGuitar.guitarModel.toString(), body.guitarSerial.toString(), body.guitarColour.toString(), body.guitarOwnerId.toString(), body.guitarYear.toString()], function(err, res){
        if (err) {
            console.log(err);
        } else {
            res.status(200).json(res);
        }
    }); 

    res.end();
}); 

Мой код переднего плана, который является приложением React.js, записывает в консоли этот объект JSON:

{"guitarMake":"Fender",
"guitarModel":"Jazzmaster",
"guitarSerial":"000000001",
"guitarColour":"Placid Blue",
"guitarOwnerId":"dummyuser",
"guitarYear":"2019"}

Который генерируется в этом блоке:

if (isValid) {
            var guitar = {
                "guitarMake" : this.state.GuitarMake,
                "guitarModel" : this.state.GuitarModel,
                "guitarSerial" : this.state.GuitarSerial,
                "guitarColour" : this.state.GuitarColour,
                "guitarOwnerId" : this.state.GuitarOwnerId,
                "guitarYear" : this.state.GuitarYear
            }
            var json = JSON.stringify(guitar);
            console.log(json);
            // do something..
            fetch("APIGATEWAY", {
                method: 'POST',
                mode: 'cors',
                headers: {
                    'Content-Type': 'application/x-www-form-urlencoded',
                },
                body: json,
            }).then(res => {
                console.log(res);
            });

Каждый раз, когда я отправляю запрос на сервер, я получаю сообщение об ошибке: TypeError: Невозможно прочитать свойство 'toString' undefined.Когда я консоль регистрирую запрос на внутреннем экспресс-сервере, он выглядит так:

{ '{"guitarMake":"Fender","guitarModel":"Jazzmaster","guitarSerial":"000000001","guitarColour":"Placid Blue","guitarOwnerId":"dummyuser","guitarYear":"2019"}': '' }

Я не могу понять, почему мой запрос выглядит так.Это только когда он будет отправлен через приложение реакции.На почтальоне это выглядит нормально на стороне сервера.Что я делаю неправильно?

1 Ответ

0 голосов
/ 05 июля 2019

Кажется, вы получаете тело как строку, а не как json.

Сначала убедитесь, что вы добавили промежуточное ПО json к своему объекту сервера:

app.use(express.json());

Во-вторых, вы используете неправильный тип пантомимы. Если вы хотите, чтобы сервер анализировал объект json, вы должны использовать application/json:

fetch("APIGATEWAY", {
    method: 'POST',
    mode: 'cors',
    headers: {
        'Content-Type': 'application/json', // Here!
    },
    body: json,
}).then(res => {
    console.log(res);
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...