流浪的菜袅 2023-02-25 21:26 采纳率: 79.5%
浏览 18
已结题

nodejs中post参数body指向报错

谢谢大家,是这样的,我在学习nodejs,想实现图片上传过程中遇到了问题,
前端代码:

<input type="file" name="file" id="file">
    <button id="btn">上传</button>
    <img src="" alt="" id="img">
    <script>
        let file = document.querySelector('#file')
        let btn = document.querySelector('#btn')
        let img = document.querySelector('#img')
        btn.addEventListener('click',function(){
            console.log(file.files[0]);
            let files_data = file.files[0]
            let fileReader = new FileReader()
            fileReader.readAsDataURL(files_data)
            let base64;
            let date = new Date()
            let time = date.toJSON()
            fileReader.onloadend = function(e){
                base64 = e.target.result
                console.log('base641',base64);
                img.src = e.target.result
                console.log(typeof e.target.result);
                let xml = new XMLHttpRequest()
                xml.open('POST','http://localhost:3000/api/swiper',true)
                xml.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                xml.onload = function(){

                }
                console.log('base64',base64);
                let obj = {
                    swi_url:base64,
                    swi_qiyong:false,
                    swi_type:'活动',
                    swi_time:time
                }
                xml.send(JSON.stringify(obj))
            }
        })

nodejs代码:

const express = require('express')
const router = express.Router()
const multer = require('multer')
const mysql = require('../model/index')
const path = require('path')
const dizhi = path.join(__dirname,'../upload')
router.post('/',async(req,res) => {
    const data = req.body
    console.log(data);
})
module.exports = router

我在前端代码中,将图片转成了base64格式的数据,然后通过post请求传递到了后端,我也通过req.body接收到了,但是无法指向其中的某一个数据,指向了就会报错,也无法json.parent这些body参数数据,想请问一下大家代码哪里出错了。
刚开始学nodejs,问的问题确实baici,谢谢大家理解

  • 写回答

1条回答 默认 最新

  • MarkHan_ 2023-02-25 22:15
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    根据你提供的代码,可以看到你在前端使用的是 XMLHttpRequest 对象发送 POST 请求,并且设置请求头为 "Content-type": "application/x-www-form-urlencoded",但是你在后端使用的是 req.body 来接收请求体。这就出现了数据格式不匹配的问题。

    如果你使用 XMLHttpRequest 对象发送 POST 请求,并且设置请求头为 "Content-type": "application/json",那么后端使用 req.body 来接收请求体就是一个 JSON 对象。代码如下:

    前端代码:

    let xml = new XMLHttpRequest()
    xml.open('POST', 'http://localhost:3000/api/swiper', true)
    xml.setRequestHeader("Content-type", "application/json");
    xml.onload = function () {}
    let obj = {
      swi_url: base64,
      swi_qiyong: false,
      swi_type: '活动',
      swi_time: time
    }
    xml.send(JSON.stringify(obj))
    
    
    

    后端代码:

    router.post('/', async(req, res) => {
      const data = req.body
      console.log(data.swi_url)
    })
    
    
    

    这样你就可以通过 data.swi_url 来访问前端发送过来的数据了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月6日
  • 已采纳回答 2月26日
  • 创建了问题 2月25日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵