#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();
Если это не сработает —
- Посмотрите, что говорит ваша консоль разработчика. Это должно дать вам много информации о запросе. Если есть ошибка, следуйте информации (код ответа, любое сообщение об ошибке и т.д.) И попытайтесь определить проблему.
- Используйте клиент rest, такой как POSTMAN, чтобы сначала проверить свой сервер. Когда вы знаете, что он может хорошо ответить на правильный запрос, вы можете с уверенностью попробовать свой интерфейс и получить больше понимания того, как следует обрабатывать ответ.