谢谢大家,是这样的,我在学习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,谢谢大家理解
该回答引用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 来访问前端发送过来的数据了。