Node.js 将base64编码图像从浏览器上载到nodejs express时出现无效json错误
我使用的是express 4.13.1 我的http请求如下所示Node.js 将base64编码图像从浏览器上载到nodejs express时出现无效json错误,node.js,file-upload,base64,Node.js,File Upload,Base64,我使用的是express 4.13.1 我的http请求如下所示 const express = require('express'); const uploader = require('./config/routes/uploader'); const cors = require('cors'); const app = express(); const corsOptions = { origin: 'http://localhost:4200', optionsSuccess
const express = require('express');
const uploader = require('./config/routes/uploader');
const cors = require('cors');
const app = express();
const corsOptions = {
origin: 'http://localhost:4200',
optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
methods: 'GET,HEAD,PUT,OPTIONS,POST,DELETE',
credentials: true
};
app.use(cors(corsOptions));
app.use('/api/uploader', uploader);
我从节点得到以下错误
但是我还没有为路由配置解析器
/api/上传器/上传\u配置文件\u图像\u base64/
我的控制器代码如下,用于处理base64编码的图像,请求在到达控制器方法之前失败
exports.handleProfileImageUploadBase64 = (req, res) => {
console.log('>>>gg',req.body,'gg<<<');
let matches = req.body.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/);
if (matches.length !== 3) {
return res.status(400).send('Unexpected request body');
}
let type = matches[1];
let imageBuffer = new Buffer(matches[2], 'base64');
console.log('>>>uu',imageBuffer,'uu<<<');
let imgPath = path.resolve('./profile_image_uploads/');
fs.writeFile('test.jpg', imageBuffer.data, function(err) {
console.log('>>>gg',err,'gg<<<');
});
fs.readdir(imgPath, (err, files) => {
files.forEach(file => {
console.log('>>>pp',file,'pp<<<');
});
});
res.json({
"img":type
});
/*res.end();*/
};
和app.js,如下所示
const express = require('express');
const uploader = require('./config/routes/uploader');
const cors = require('cors');
const app = express();
const corsOptions = {
origin: 'http://localhost:4200',
optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
methods: 'GET,HEAD,PUT,OPTIONS,POST,DELETE',
credentials: true
};
app.use(cors(corsOptions));
app.use('/api/uploader', uploader);
将响应更改为res.json({img:type});实际上,请求甚至没有命中控制器方法,节点上的异常堆栈跟踪是当从浏览器发送请求时,我假设由于http body中的base64映像而给出的无效json不是有效的json,我不希望它被json解析器解析,json解析器是body parser中间件,尽管我并没有为此路由配置它,但express似乎无论如何都要解析它。若您不想使用json解析器,那个么为什么要将请求的头类型设置为“Application/json”?为什么不以“表单数据”或“x-www-form-urlencoded”的形式发送?