流浪的菜袅 2023-02-27 00:46 采纳率: 79.5%
浏览 44
已结题

xhr携带formData发请求nodejs报500

小菜袅又来提问啦
我本来前端以这样的方式提交请求:

<form action="http://localhost:3000/api/swiper" method="post" enctype="multipart/form-data">
        <input type="file" name="avatar" id="file" multiple="multiple">
        <button id="btn">上传</button>
        <img src="" alt="" id="img">
</form>

以这样的方式提交请求把图片给到后端很顺利,但是不用jquery又得不到响应数据,就想着不这样弄,把form表单去了
前端:

<input type="file" name="avatar" id="file" multiple="multiple">
<button id="btn">上传</button>
<img src="" alt="" id="img">
<script>
        const btn = document.querySelector('#btn')
        const inp_file = document.querySelector('#file')
        btn.addEventListener('click',function(){
            var xhr = new XMLHttpRequest();
            xhr.open('POST', 'http://localhost:3000/api/swiper');
            xhr.setRequestHeader('Content-Type', "multipart/form-data; boundary=---------------------------" + Date.now().toString(16));
            let file = inp_file.files[0]
            console.log(file);
            let formdata = new FormData()
            formdata.append('avatar',file)
            xhr.send(formdata);
            xhr.onreadystatechange = function() {
                if(xhr.readyState === 4 && xhr.status === 200) {
                    console.log(xhr.responseText);
                }
            }
        })
    </script>

nodejs:

const express = require('express')
const router = express.Router()
const multer = require('multer')
const mysql = require('../model/orm')
let date = new Date()
const moment = require('moment')
let time = date.getTime()
let originalname;
let random = Math.floor(Math.random() * (1000 - 100 + 1)) + 100
let urlStr; 
let obj;
let arr = [];
let storage = multer.diskStorage({
    destination: function(req, file, cb) {
        cb(null, 'public/upload'); 
    },
    filename: function(req, file, cb) {
        originalname = Buffer.from(file.originalname, "latin1").toString("utf8");
        urlStr = time + '-' + random + '-' + originalname
        time = date.getTime()
        random = Math.floor(Math.random() * (10000 - 100 + 1)) + 100
        obj = {
            swi_url:'http://localhost:3000/upload/' + urlStr,
            swi_qiyong:'false',
            swi_type:"活动",
            swi_time:moment(new Date()).format()
        }
        arr.push(obj)
        cb(null, urlStr)
    }
})
let upload = multer({ storage: storage });
// upload.single('form'),
router.post('/',upload.single('avatar'),(req,res) => {
    try {
        console.log(req.file);
        console.log(req.body);
    } catch (err) {
        console.log(err);
        res.status(500).send(err);
    }
    // console.log(arr);
    // let swiper = mysql.model('swiper')
    // swiper.insert(arr,(err,data) => {
    //     if(err) {
    //         console.log(err);
    //         return 
    //     }
    //     res.send({
    //         code:200,
    //         msg:"post请求处理完毕"
    //     })
    // })
})
module.exports = router

这样之后,后端就报500,然后改来改去,要不就是req.body没数据要么就又是500,海子技术不行,底子差,头都快想烂了,是因为啥啊,help海子吧

  • 写回答

2条回答 默认 最新

  • 「已注销」 2023-02-27 08:07
    关注

    贴下错误信息

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月7日
  • 已采纳回答 2月27日
  • 创建了问题 2月27日

悬赏问题

  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥15 键盘指令混乱情况下的启动盘系统重装