Node JS)未定义的图像上传问题

Node JS) Image upload issue with undefined

var http = require('http');
var express = require('express');
var request = require('request');
var mysql = require('mysql');
var bodyParser = require('body-parser');
var fs = require('fs');

var multer = require('multer');

var app = express();
app.use(bodyParser.json());
app.use(express.bodyParser());
app.use(app.router);

app.use(multer( {dest:'./uploads/',
    onFileUploadStart : function(file){
        console.log('File recieved:');
        console.log(file);
    },
     onFileUploadData:function (file,data){
        console.log('Data recieved');
    },
     onParseEnd: function(req,next){
        next();
     }
}));


app.use(express.static(__dirname+"/public"));

app.post('/upload',function(request,response){
    console.log(request.file);
    console.log(request.body);
});

上面是我处理上传图片的核心代码。

    app.post('/upload',function(request,response){
    console.log(request.file);
    console.log(request.body);
});

但我得到的是 '不明确的 {}'

我怎么了? 我正在搜索很多问题,其中大多数都说我必须使用 multer...但结果是一样的,没有任何变化。

我的package.json如下:

{ "name": "photozzle", "version": "1.0.0", "dependencies": { "body-parser": "1.14.1", "clear": "", "express": "3.5.1", "fs": "", "multer": "^0.1.6", "mysql": "", "path": "", "q": "", "request": "" }, "engines": { "node": "0.10.x", "npm": ">1.4.0" } }

你觉得呢?有什么我遗漏的吗?

我正在使用 post man 来测试它。

最后,感谢 'Lazarev Alexandr' 我解决了这个问题 下图可以作为证明。 我希望我的问题对像我这样的新手开发者有所帮助。谢谢!

正如描述的那样here

NOTE: Multer will not process any form which is not multipart (multipart/form-data).

因此,如果您想使用 multer,则不应将图像作为二进制流发送。您应该改用多部分表单请求。以下是使用 Postman 工具实现它的方法:

另外,我建议你使用最新版本的multer。在终端中通过 运行 此命令更新它:

npm install multer@latest

之后,删除 bodyParser 中间件使用,并使用 multer 本身。您的代码应如下所示:

var http = require('http');
var express = require('express');
var request = require('request');
var mysql = require('mysql');
var bodyParser = require('body-parser');
var fs = require('fs');

var multer  = require('multer')
var upload = multer({dest:'./uploads/'});

var app = express();
app.use(bodyParser.json());
app.use(app.router);
app.use(express.static(__dirname+"/public"));

app.post('/upload', upload.single('img'), function (req, res, next) {
    console.log(req.file);
});