如何从邮递员延伸的“forms – 数据”价值中获得价值

我正在使用节点js与快递框架和restapirestapi客户端我使用邮递员扩展与铬浏览器在这里我能够从选项“x-www-form-urlencoded”获得值,但我无法获得值“表单数据”我想从“表单数据”选项获取值,也需要上传图像文件。 请帮助我做到这一点。 我想从“表单数据”选项和图像获取值。 请帮帮我。 下面我提到的代码是我用过的。 在这里输入图像描述

var express = require('express'); var path = require('path'); var favicon = require('static-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var http = require('http').Server(app); var mysql = require('mysql'); var util = require('util'); var trim = require('trim'); var validator = require('validator'); var bodyParser = require('body-parser'); var Ingest = require('ingest'); var multer = require('multer'); var upload = multer({ dest: 'uploads/' }); var type = upload.single('recfile'); passport = require('passport') , LocalStrategy = require('passport-local').Strategy; async = require('async'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); app.post('/upload', function(req, res){ console.log(req.file); // "form-data" values not able to get here console.log(req);// "form-data" values not able to get here console.log('body : '+JSON.stringify(req.body));// "form-data" values not able to get here }); 

我没有在邮递员头中设置任何内容types

 app.post('/upload', function(req, res){ console.log('req.headers \n '+JSON.stringify(req.headers)); console.log('req.body.file :- '+req.body.file); console.log('\n\n req.body :- '+JSON.stringify(req.body)); }); 

我得到了以上代码的结果。 req.headers

  {"host":"localhost:3001","connection":"keep-alive","content length":"5808","cache-control":"no-cache","origin":"chrome-extension://mkhojklkhkdaghjjfdnphfphiaiohkef","password":"password","user-agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36","username":"User2","content-type":"multipart/form-data; boundary=----WebKitFormBoundaryV4zAIbjEyKYxLRWe","accept":"*/*","accept-encoding":"gzip, deflate","accept-language":"en-US,en;q=0.8","cookie":"connect.sid=s%3Atz4f1ZgJkaAjuDD1sOkMB9rr.Z8EUIyxEcr0EyFQL96v0ExGRidM3SAVTx8IIr52O0OI"} 

req.body.file: – 未定义

req.body: – {}

我得到了解决scheme的帮助下面的代码

  var express = require('express'); var router = express.Router(); var util = require("util"); var fs = require("fs"); var formidable = require('formidable'); var path = require('path'); router.post("/upload", function(req, res, next){ var form = new formidable.IncomingForm(); form.parse(req, function(err, fields, files) { // `file` is the name of the <input> field of type `file` console.log(files); console.log(fields); res.writeHead(200, {'content-type': 'text/plain'}); res.write('received upload:\n\n'); res.end(util.inspect({fields: fields, files: files})); }); form.on('error', function(err) { console.error(err); }); form.on('progress', function(bytesReceived, bytesExpected) { var percent_complete = (bytesReceived / bytesExpected) * 100; console.log(percent_complete.toFixed(2)); }); form.on('end', function(fields, files) { /* Temporary location of our uploaded file */ var temp_path = this.openedFiles[0].path; /* The file name of the uploaded file */ var file_name = this.openedFiles[0].name; /* Location where we want to copy the uploaded file */ var new_location = 'public/images/'; fs.readFile(temp_path, function(err, data) { fs.writeFile(new_location + file_name, data, function(err) { fs.unlink(temp_path, function(err) { if (err) { console.error(err); } else { console.log("success!"); } }); }); }); }); }); 

我认为你需要使用身体分析器为此,也需要更新你的app.js为

 app.use( bodyParser.json() ); // to support JSON-encoded bodies app.use(bodyParser.urlencoded({ // to support URL-encoded bodies extended: true })); 

是几次面临同样的问题,根据我的经验,你不应该在postman头设置内容types,因为它应该是未定义的,节点服务器根据需要自动设置内容types。 如果设置了内容types,那么在节点服务器中不会​​获取任何图像和其他数据。

  1. 您从req.body.file中获取图像
  2. 你从req.body获得其他数据
  3. app.use(multipart())在中间件

过程如何使用multipart作为中间件

  1. var multipart = require('connect-multiparty');
  2. global.app = module.exports = express();
  3. app.use(多());