流浪的菜袅 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 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程