尝试发送 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)

NodeJS - 使用节点获取发送 JSON 对象参数

通过 Fetch API 将复杂的表单数据发送到 PHP 端点 [重复]

Mailchimp API 在使用 node-fetch 而不是 json 时返回一个大的 gzip 对象

从 API 获取数据,然后将其发送到 EJS 文件

Fetch in react native不发送帖子