Мой http POST-запрос NodeJS для вычисления суммы значения json не работает

#node.js #json #express

#node.js #json #выразить

Вопрос:

Я новичок в NodeJS, и я выполняю упражнение для вычисления суммы значения JSON, которое я ввел в POST-запросе, но postman выдает мне сообщение об ошибке

«Невозможно ОПУБЛИКОВАТЬ / добавить».

Я что-то упустил? Вот мой код:

 const express = require('express');
const math = require('mathjs');
var bodyParser = require('body-parser');

const app = express();

const host = "127.0.0.1"
const port = 3000

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

async function add(tal) {
    let promise = await fetch('http://127.0.0.1:3000/apiServer/add', {
        method: 'POST',
        headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
        },
        body: JSON.stringify(tal) }
    )
    let summa = math.sum(promise);
    return summa;
}

app.post('apiServer/add', (req, res) => {
    var tal = req.body.user;  
    res.send(add(tal));
});

app.listen(port, host, () => {
    console.log(`The server is running at: http://${host}:${port}`);
});
 

Публикация:

 {    
  "tal": "10,343,24,345,22,23,233"
}
 

Комментарии:

1. Конечная точка POST, которую вы определили, предназначена для path: apiServer/add , поэтому вы должны отправлять apiServer/add . Кроме того, async метод всегда будет возвращать обещание, вам нужно будет получить значение разрешения add() после его вызова, прежде чем отправлять обратно значение

2. @Ник, спасибо за быстрый ответ. Сначала я попробовал /add и не сработал, затем сменил на 7apiServer/add .

3. Получаете ли вы сообщение об ошибке при попытке отправить сообщение apiServer/add ? Это одна и та же ошибка разных

4. Этого не должно быть .user , но должно быть .tal вместо этого: var tal = req.body.user; поскольку данные, которые вы отправляете, похоже, не имеют .user свойства

5. @Nick, просто добавив /, postman возвращает пустой, но я получаю «Необработанное promiserejectionwarning:» на терминале.

Ответ №1:

Эта функция выглядит циклической. Вы используете выборку для вызова своей собственной конечной точки, я думаю, вам просто нужно создать функцию add, а также функцию get или post, чтобы затем вызвать add

вот пример

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

const app = express();

const port = 3000;

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

function add(num1, num2) {
    return parseFloat(num1)   parseFloat(num2);
}

app.get('/api/add', (req, res) => {
    const num1 = req.query.num1;
    const num2 = req.query.num2;
    const total = add(num1, num2);
    res.send(`The total is ${total}`);
});

app.listen(port, () => {
    console.log(`The server is running at http://localhost:${port}`);
});
 

Затем вы можете вызвать его в приложении типа Postman или Insomnia, используя get, подобный этому

 http://localhost:3000/api/add?num1=12amp;num2=3
 

введите описание изображения здесь