2016-11-11 24 views
0

我使用的是sails版本0.10.5。我有bodyParser設置像這樣在http.js使用自定義Skipper body parser配置的錯誤

bodyParser: require('skipper')({ 
    limit: 52428800 
}) 

我不停啓動服務器時收到此錯誤:

error: TypeError: Cannot read property 'toLowerCase' of undefined 
    at _parseHTTPBody (/var/www/testapp-backend/node_modules/skipper/index.js:49:19) 
    at /var/www/testapp-backend/node_modules/sails/lib/hooks/http/middleware/defaults.js:104:28 
    at module.exports (/var/www/testapp-backend/node_modules/sails/lib/hooks/http/middleware/defaults.js:144:7) 
    at loadExpress (/var/www/testapp-backend/node_modules/sails/lib/hooks/http/initialize.js:103:65) 
    at /var/www/testapp-backend/node_modules/sails/lib/hooks/http/index.js:190:18 
    at /var/www/testapp-backend/node_modules/sails/lib/app/private/after.js:91:14 
    at /var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:232:13 
    at /var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:119:25 
    at /var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:24:16 
    at /var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:229:17 
    at /var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:516:34 
    at handlerFn (/var/www/testapp-backend/node_modules/sails/lib/app/private/after.js:78:13) 
    at /var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:511:21 
    at /var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:227:13 
    at /var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:111:13 
    at Array.forEach (native) 
    at _each (/var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:32:24) 
    at async.each (/var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:110:9) 
    at _asyncMap (/var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:226:9) 
    at Object.map (/var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:204:23) 
    at _parallel (/var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:509:20) 
    at Object.async.parallel (/var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:539:9) 
    at Sails.emitter.after (/var/www/testapp-backend/node_modules/sails/lib/app/private/after.js:89:11) 
    at Hook.initialize (/var/www/testapp-backend/node_modules/sails/lib/hooks/http/index.js:189:15) 
    at Hook.bound [as initialize] (/var/www/testapp-backend/node_modules/lodash/dist/lodash.js:729:21) 
    at /var/www/testapp-backend/node_modules/sails/lib/hooks/index.js:132:16 
    at /var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:425:17 
    at /var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:419:17 
    at Array.forEach (native) 
    at _each (/var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:32:24) 
    at Immediate.taskComplete (/var/www/testapp-backend/node_modules/sails/node_modules/async/lib/async.js:418:13) 
    at processImmediate [as _immediateCallback] (timers.js:367:17) [TypeError: Cannot read property 'toLowerCase' of undefined] 

error: Encountered an error when trying to use configured bodyParser. 
error: Usually, this means that it was installed incorrectly. 
error: A custom bodyParser can be configured without calling the wrapper function- e.g.: 
``` 
bodyParser: require("connect-busboy") 
``` 
error: Alternatively, if you need to provide options: 
``` 
bodyParser: { 
fn: require("connect-busboy"), 
options: {/* ... */} 
} 
``` 

有後沒有錯誤出現。我究竟做錯了什麼?我試圖按照錯誤的說明,但與船長,我不能上傳文件到S3大於幾MB的。我試過這個,它不起作用:

bodyParser: { 
fn: require("skipper"), 
options: {limit: 52428800} 
} 

這是根據上面的消息。

+0

(見https://github.com/balderdashy/skipper/issues/157 ) – mikermcneil

回答

2

由於Sails < 0.12中默認設置爲bodyParser的錯誤,所以配置中間件的常規方法將不起作用。最簡單的方法是簡單地替代bodyParser與另一定製中間件名中間件順序和配置代替,例如:

module.exports.http = { 

    middleware: { 

    // The order in which middleware should be run for HTTP request. 
    // (the Sails router is invoked by the "router" middleware below.) 
    order: [ 
     'startRequestTimer', 
     'cookieParser', 
     'session', 
     // 'bodyParser', // <-- don't add the "bodyParser" middleware to the stack 
     'skipper', // <-- instead use this "custom" middleware 
     'handleBodyParserError', 
     'compress', 
     'methodOverride', 
     'poweredBy', 
     '$custom', 
     'router', 
     'www', 
     'favicon', 
     '404', 
     '500' 
    ], 

    // Configure Skipper 
    skipper: require('skipper')({ 
     limit: 52428800 
    }) 

    } 
} 
相關問題