簡體   English   中英

NodeJS:無法獲取發布請求文本字段

[英]NodeJS: cannot grab post request text field

我是Node JS的新手,所以事情對我來說並不容易。 場景是我有一個輸入字段,它將接受多個文件。

<input id="upload-input" type="file" name="uploads[]" multiple="multiple">

在我的JS腳本中,我抓取了該字段的change事件,並使用formDataajax post方法創建了對在不同端口中運行的上載器應用程序的發布請求

$('#upload-input').on('change', function() {
var files = $(this).get(0).files;
if (files.length > 0) {
    var formData = new FormData();
    formData.append('directory', "path/to/directory");
    for (var i = 0; i < files.length; i++) {
        var file = files[i];
        formData.append('uploads[]', file, file.name);
    }
    $.ajax({
        url: 'https://myurl.com:3000/upload',
        type: 'POST',
        data: formData,
        processData: false,
        contentType: false,
        success: function(data) {
            console.log(data);
        },
    });
}
});

現在文件正在發送,並且在后端,我可以使用formidable上載該文件,但是問題是我無法獲取directory值,這是我的代碼

require('dotenv').load();
var express = require('express');
var app = express();
var path = require('path');
var formidable = require('formidable');
var fs = require('fs');
var session = require('express-session');
app.set('views', __dirname + '/public');
app.use('/uploads', express.static(process.env.USER_UPLOADS))
var cors=require('cors');
app.use(cors({origin:true,credentials: true}));
app.post('/upload', function(req, res) {
    var user_folder = "path/to/directory/";
    var form = new formidable.IncomingForm();
    form.multiples = true;
    form.uploadDir = path.join(__dirname, process.env.USER_UPLOADS + user_folder);
    form.on('file', function(field, file) { fs.rename(file.path, path.join(form.uploadDir, file.name)); });
    form.on('error', function(err) { console.log('An error has occured: \n' + err); });
    form.on('end', function() { res.end('success'); });
    form.parse(req);
});
var server = app.listen(3000, function(){
    console.log('Server listening on port 3000');
});

我試過了

console.log(req.body)

但它返回undefined ,那么如何從后端獲取directory值?

提前致謝。

為了解決您的問題,我對您主應用程序的服務器文件進行了一些更改,即對您適用的任何人server.js/app.js/index.js 請參閱以下更改:

require('dotenv').load();
var express = require('express');
var app = express();
var path = require('path');
var bodyParser = require('body-parser');
var formidable = require('formidable');
var fs = require('fs');
var session = require('express-session');
var cors=require('cors');

app.set('views', __dirname + '/public');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cors({ origin:true, credentials: true }));
app.use('/uploads', express.static(process.env.USER_UPLOADS));


app.post('/upload', function(req, res) {
    var user_folder = "path/to/directory/";
    var form = new formidable.IncomingForm();
    form.multiples = true;
    form.uploadDir = path.join(__dirname, process.env.USER_UPLOADS + user_folder);
    form.on('file', function(field, file) { fs.rename(file.path, path.join(form.uploadDir, file.name)); });
    form.on('error', function(err) { console.log('An error has occured: \n' + err); });
    form.on('end', function() { res.end('success'); });

    // Note the changes here
    form.parse(req, (error, fields, files) => {
      console.log(JSON.stringify({
        fields, // { directory: "path/to/directory" }
        files // contains the uploaded files
    }), null, 2);
  });
});


var server = app.listen(3000, function(){
    console.log('Server listening on port 3000');
});

根據此處的文檔, form.parse可以采用可選的回調函數。

解析傳入的包含表單數據的node.js請求。 如果提供了cb,則將收集所有字段和文件並將其傳遞給回調:

form.parse(req, function(err, fields, files) {
  // ... 
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM