尝试发送 json 对象时,fetch api 如何与 express 一起使用
Posted
技术标签:
【中文标题】尝试发送 json 对象时,fetch api 如何与 express 一起使用【英文标题】:How does the fetch api work with express when trying to send a json object 【发布时间】:2021-11-03 04:14:05 【问题描述】:我有一个系统,我有一个 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
还有一个使用 fetch 发送 post 请求的网站(infoModal 是我用来显示数据的函数)(我在 discord 上收到了 action 函数,从那时起就一直在使用它,但我从来不需要做任何事情与响应)
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')
【问题讨论】:
我认为客户端方法应该说return await res.json();
您可以使用 postman 来检查只运行后端的 api。 here
你需要一个理解 JSON 的 bodyparser
@slebetman 已经有
You need to do some debugging。使用浏览器中的开发人员工具。看看控制台。有没有错误?查看网络选项卡。是否正在发送请求?使用正确的标题和正文?它得到回应了吗?向服务器添加一些日志记录。路由是否被调用? req.body
有什么价值吗?它是否进入开关的右分支?只是告诉我们it doesn't work 并不能帮助我们帮助您。告诉我们您预计会发生什么,以及这与实际发生的情况有何不同。
【参考方案1】:
一个明显的错误是没有执行 Fetch 响应的 jeson()
方法。而且,虽然无害,但第二个 await
语句并不是真正必要的 - 无论如何,异步函数将返回的内容包装在一个承诺中。
return res.json();
如果这不起作用 -
查看您的开发者控制台显示的内容。它应该为您提供有关请求的大量信息。如果出现错误,请按照信息(响应代码、任何错误消息等)并尝试确定问题。
首先使用 POSTMAN 等 REST 客户端来验证您的后端。当您知道它可以很好地响应正确的请求时,您可以放心地尝试您的前端,并更好地了解应该如何处理响应。
【讨论】:
以上是关于尝试发送 json 对象时,fetch api 如何与 express 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
使用 Fetch API 将数据发送到 PHP 服务器(首选 POST 方法和 JSON)
通过 Fetch API 将复杂的表单数据发送到 PHP 端点 [重复]