2016-06-15 34 views
-1

我有兩個節點服務器,我試圖在它們之間使用rest api發送文件。但是,當我發送數據時,我在接收服務器上收到一個「Unexpected token - 」。在發件人上,我收到[錯誤:結束後寫入]。意外的令牌 - 解析json請求時

我的路由器代碼:

var express = require('express'); 
var multer = require('multer'); 
var path = require('path'); 

var Router = express.Router; 

const MODULES_PACKAGES_UPLOAD_DIR = path.resolve('/tmp'); 

module.exports = function() { 

var router = new Router(); 

var storage = multer.diskStorage({ 
    destination: function(req, file, cb){ 
    cb(null, MODULES_PACKAGES_UPLOAD_DIR); 
    } 
}); 

var upload = multer({storage: storage}); 

router.post('/fileUpload', upload.array(), function(req, res){ 

    debug('We have a a file'); 

    //Send the ok response 
    res.statusCode = 200; 
    res.setHeader('Content-Type', 'text/plain; charset=utf-8'); 
    res.end('\n'); 
} 

發送代碼:

var Util = require('util'); 
var http = require('request-promise'); 
var request = require('request'); 
var fs = require('fs'); 

var Post = require('http'); 
var FormData = require('form-data'); 

//Generate the form data 
var formdata = modules.map(function(fileName){ 
    return fs.createReadStream('/opt/files/'+fileName); 
}); 

var data = getData(); //Gets the body of the code as a promise 

return Promise.all(data) 
.then(function(dataResults){ 

    var options = { 
    method: 'POST', 
    uri: 'https://' + name +'/file', 
    rejectUnauthorized: false, 
    timeout: 2000, 
    body: { 
     keys: keyResults, 
     modules: modules, 
    }, 
    formData: { <====== If I remove this section everything works 
     'module-package': formdata, 
    }, 
    json: true // Automatically stringifies the body to JSON 
    }; 

    request.post(options, function(err, response){ 
    if(err){ 
     debug('Error: ',err); 
    } 
    else{ 
     debug('We posted'); 
    } 
    }); 

奇怪的是,如果我刪除FORMDATA部分則一切正常,但是當它是存在的,我得到一個異常說:

SyntaxError: Unexpected token - 
    at parse (/home/.../projects/node_modules/body-parser/lib/types/json.js:83:15) 

有沒有人有任何想法我可以做錯了?

+1

如果JSON解析器顯示JSON字符串無效 - 這很可能是真的。提供確切的JSON失敗。 – zerkms

+0

它不說。它只是說 - 。我所知道的是,當我刪除formData沒有解析問題。 – nbroeking

+1

它確實說在解析過程中有語法錯誤。只需檢查'body-parser/lib/types/json.js'庫源文件。 「我所知道的是,當我刪除formData沒有解析問題」---好,所以刪除它,問題得到解決。 – zerkms

回答

2

以防萬一未來有人遇到同樣的問題。正如@Bergi所說的。你不能同時擁有json數據和表單數據。你需要選擇一個。解決的辦法就是像表單一樣傳遞json數據。

var options = { 
    method: 'POST', 
    uri: 'https://' + name +'/file', 
    rejectUnauthorized: false, 
    timeout: 2000, 
    body: { 

    }, 
    formData: { 
     'module-package': formdata, 
     keys: keyResults, 
     modules: modules, 
    }, 
    json: true // Automatically stringifies the body to JSON 
}; 

request.post(options, function(err, response){ 
    if(err){ 
     debug('Error: ',err); 
    } 
    else{ 
     debug('We posted'); 
    } 
}); 
2

在我的情況下,HTTP請求的頭部包含「Content-Type」爲「application/json」。

因此,這裏的事情來檢查:

  1. 僅發送任何形式的數據或JSON體。不是都。
  2. 如果提到「Content-Type」,請檢查標題。刪除。
相關問題