【问题标题】:how to get the values from postman extention "form-data" values如何从邮递员扩展“表单数据”值中获取值
【发布时间】:2016-09-22 23:27:11
【问题描述】:

我正在使用带有 express 框架和 rest api 的 node js 对于rest api客户端,我正在使用带有chrome浏览器的邮递员扩展 在这里,我能够从“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
});

我没有在邮递员标题中设置任​​何内容类型

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));
});

我得到了上述代码的以下结果。 请求头文件

 {"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 :- {}

【问题讨论】:

    标签: node.js


    【解决方案1】:

    是的,我多次遇到同样的问题,根据我的经验,您没有在邮递员标头中设置内容类型,因为它应该是未定义的,节点服务器会根据要求自动设置内容类型。如果你设置了内容类型,那么你不会在节点服务器中获得任何图像和其他数据。

    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(multipart());

    【讨论】:

    • 感谢您的回复。我仍然没有从“表单数据”选项中获得值。我在上面的问题中提到了 req.body.file 和 req.body 的输出。请给我一个建议
    • 请使用 multer 作为中间件 app.use(multipart()) 它肯定会工作..
    • 我是 node js 新手,请解释我如何使用这个 multer 作为中间件 app.use(multipart())
    • connect-multiparty 最好是 multer
    【解决方案2】:

    我在下面的代码的帮助下得到了解决方案

        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!");
                        }
                    });
                });
            });
        });
    });
    

    【讨论】:

      【解决方案3】:

      我认为您需要为此使用 body-parser 并且还需要将您的 app.js 更新为

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

      【讨论】:

      • 我认为这会有所帮助stackoverflow.com/questions/5710358/…
      • 我已经使用了这段代码,它没有给我输出。我仍然无法从“form-data”中获取值
      • 是您的邮递员中的字段名称与您在 multer 中使用的字段名称相同,即 recfile
      猜你喜欢
      • 2016-07-11
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多