为了账号安全,请及时绑定邮箱和手机立即绑定

如何在服务器端提取 req.body(我正在使用 fetch)?

如何在服务器端提取 req.body(我正在使用 fetch)?

慕哥9229398 2021-11-25 16:16:58
我正在制作一个由单独的前端和后端组成的项目。从前端,我通过 fetch 发出一个 POST 请求,该请求应该向后端发送一个字符串“ORANGE”,然后后端应该将其记录到控制台。我无法让后端控制台记录字符串。我查看了 devtools 中的请求,字符串“ORANGE”被埋在“Request payload”下。请求本身发送正常。我如何实际访问字符串以便我可以用它做事?(例如,存储在数据库中)//FRONTENDconst commentForm = document.getElementById("editform");commentForm.addEventListener('submit', function(e) {     e.preventDefault();    fetch('http://localhost:3000/posts/:id', {        mode: 'cors',        method: 'post',        headers: {            "Content-type": "text/plain;charset=UTF-8"        },        body: "ORANGE"    }).then(function(response) {        if (response.ok) {            console.log("response.ok was true: "+ response)        } else {            let error = new Error(response.statusText)            error.response = response            throw error        }    })});//BACKENDrouter.post('/posts/:id', function(req, res, next) {    console.log('What do I put here to get ORANGE logged?!')    //On the server side I tried some console.log tests.    //console.log("req is " + req);               //req is [object Object]    //console.log("type of req is " + typeof req); //type of req is object    //console.log(JSON.parse(req)); //SyntaxError: unexpected token o in JSON at position 1      res.send('whatever. I want ORANGE.')}
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超13个赞

默认情况下,Express 不会处理请求的正文。您需要加载一个模块才能显式执行此操作。


由于您使用的是纯文本,因此您可以使用 body-parser 模块。这将body在请求上创建一个属性:


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

router.use(bodyParser.text({type: 'text/plain'}))

router.post('/posts/:id', function(req, res, next) {

    console.log(req.body);

    res.send('Response')

});

但是请注意,通常最好使用结构化数据格式(如 JSON)而不是纯文本。


查看完整回答
反对 回复 2021-11-25
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

尝试以下操作:

  1. 在 server.js 文件中使用正文解析器。

  2. 发送POST请求作为content-typejson如下,

    headers: { Content-Type: application/json }

和 body 应该是一个 JSON

body: {"color":"ORANGE"}

  1. 在您的路线中只需打印

    console.log(req.body.color)


查看完整回答
反对 回复 2021-11-25
?
互换的青春

TA贡献1797条经验 获得超6个赞

在 Express 4.16 中,不再需要 body-parser 模块。获得身体所需要的只是:


app.use(express.urlencoded({ extended: true }));

app.use(express.json());

"Content-type": "application/x-www-form-urlencoded"在 fetch 中使用,否则 CORS 会发送预检并给您带来困难。(有关此 google CORS 简单请求要求的更多信息)。


查看完整回答
反对 回复 2021-11-25
  • 3 回答
  • 0 关注
  • 345 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号