Как api выборки работает с express при попытке отправить объект json

#node.js #express #fetch-api

Вопрос:

У меня есть система, в которой у меня есть приложение nodejs:

 app.post('/action', (req, res) => {
 ...
const option = req.body.option
 ...
switch (option) {
    case 'getinfo':
        objectToSend = {"foo": "bar"}
        // i tried using
        res.json(objectToSend)
        // and
        res.send(JSON.stringify(objectToSend))
        // but neither got me anywhere
    break
}
 

И веб-сайт, который отправляет запрос на публикацию с помощью такой выборки (infoModal-это функция, которую я использую для отображения данных) (я получил функцию действия, отправленную в discord, и с тех пор использую ее, но мне никогда не приходилось ничего делать с ответом)

 let action = async (i) => {
    res = await fetch("/action", {
        headers: {
            'Accept': 'application/json',
            'Content-Type': 'application/json'
        },
        method: "POST",
        body: JSON.stringify(i)
    })
    return await res.json
}
action({
            option: 'getinfo'
        }).then(j => {
            infoModal(j.foo,'ok')
        })
 

Я действительно не могу исправить ни бэкэнд, ни интерфейс, так как оба должны работать на меня, чтобы подтвердить, что это работает…

РЕДАКТИРОВАТЬ: Это мои требования, использование и наборы:

 require('dotenv').config()
 ...
const express = require('express')
const path = require('path')
var bodyParser = require('body-parser')
let ejs = require('ejs')
const fs = require('fs')
var cookieParser = require('cookie-parser')
var colors = require('colors')

const app = express()

app.use(bodyParser.json())
app.use(cookieParser())

app.set('views', path.join(__dirname, 'frontend'))
app.set('view engine', 'ejs')
 

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

1. Я думаю, что метод клиента должен сказать return await res.json();

2. Вы можете использовать postman для проверки api, используя только серверную часть. здесь

3. Вам нужен анализатор тела, который понимает JSON

4. @slebetman уже есть

5. Вам нужно провести некоторую отладку . Используйте инструменты разработчика в своем браузере. Посмотрите на консоль. Есть ли какие-либо ошибки? Посмотрите на вкладку Сеть. Отправляется ли запрос? С правильными заголовками и телом? Получает ли он отклик? Добавьте немного журналов на сервер. Называется ли маршрут? req.body Имеет ли это какую-то ценность? Входит ли он в правую ветвь переключателя? Просто сказать нам, что это не работает , не поможет нам помочь вам. Расскажите нам, чего вы ожидаете и чем это отличается от того, что происходит.

Ответ №1:

Одна очевидная ошибка заключается в том, что не выполняется jeson() метод ответа на выборку. И, хотя это безвредно, второе await утверждение на самом деле не является необходимым — асинхронные функции в любом случае заключают то, что возвращается, в обещание.

 return res.json();
 

Если это не сработает —

  1. Посмотрите, что говорит ваша консоль разработчика. Это должно дать вам много информации о запросе. Если есть ошибка, следуйте информации (код ответа, любое сообщение об ошибке и т.д.) И попытайтесь определить проблему.
  2. Используйте клиент rest, такой как POSTMAN, чтобы сначала проверить свой сервер. Когда вы знаете, что он может хорошо ответить на правильный запрос, вы можете с уверенностью попробовать свой интерфейс и получить больше понимания того, как следует обрабатывать ответ.