2013-02-26 101 views
1

我正在使用Express 3的最新版本。我已經閱讀了文檔,並且完全按照所寫,但它仍然不工作,因爲它假設。我提交後我的上傳目錄中的文件,但然後一切都停止並從app.post回調函數不會觸發。代碼:express 3.0 bodyParser無法正常工作

HTML玉

form(action="/upload", method="post", enctype="multipart/form-data") 
    input(type="file", name="image") 
    input(type='submit', value='submit') 

App.js

var express = require('express') 
    , user = require('./routes/user') 
    , http = require('http') 
    , path = require('path') 
    , mongo = require('mongodb') 
    , Server = mongo.Server 
    , Db = mongo.Db 
    , routes = require('./routes') 

var app = express(); 

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser({uploadDir:'./upload'})); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser('your secret here')); 
    app.use(express.session()); 
    app.use(app.router); 
    app.use(require('stylus').middleware(__dirname + '/public')); 
    app.use(express.static(path.join(__dirname, 'public'))); 
}); 

app.post('/upload', function(req, res) { 
    console.log(req.files.image) // this doesn't fire at all - no matter what i write here 
    res.send(200) //doesn't run also 
}); 
+0

更現代的版本需要'VAR bodyparser =需要( 'bodyparser'); app.use(bodyparser.urlencoded({延長:真}));',當然,一個人必須先'NPM安裝體parser' – ekkis 2015-10-31 08:27:17

回答

2

你需要讀取數據後返回響應。在沒有返回響應的情況下,express並不知道響應何時完成,節點不會關閉與客戶端的連接。

試試這個:

app.post('/upload', function(req, res) { 
    console.log(req.files.image); 

    req.on('data', function(raw) { 
    console.log('received data'); 
    }); 

    req.on('end', function() { 
    console.log('end'); 
    res.send(200); 
    }); 
} 
+0

它不工作 - 我已經嘗試過:( – Kriss 2013-02-26 10:41:50

+0

它看起來像接收後文件停止 - 不會在app.post中執行函數 – Kriss 2013-02-26 10:59:09

+0

我已經更新了我的答案,這是有道理的,上傳必須先完整閱讀,並且響應代碼不應該發送,直到firefox發送。所有的數據 – AndyD 2013-02-26 11:03:09

2

嘗試向用戶發送一個簡單的響應。

app.post('/upload', function(req, res) { 
    console.log(req.files.image); 
    res.write('File Uploaded !!'); 
    res.end(); 
} 

更新

你應該嘗試改變格式

app.post('/upload', function(err,req,res,next){ 
//Check for errors then handle it 
} 

不能告訴太多,直到我知道你做了什麼錯誤,因爲文件被上傳到上傳目錄bodyParser工作正常。也許你的路由正在被另一個函數處理,或者根本沒有處理。 app.router是調用回調的代碼。

當你做app.get('/upload', function(req, res) { ... });它是實際調用回調函數來處理請求的路由器。你能否確認你是否可以成功執行app.get('/upload',...); html-jade文件。如果沒有,那麼你的路線有問題。

+0

它上傳文件,但什麼也不做 - 沒有colsole日誌沒有寫任何東西 - 提交後瀏覽器忙 - 就像尋找東西。當我使用郵遞員併發送簡單的發佈請求時 - 它可以工作,但帶有文件anbd表單否 – Kriss 2013-02-26 11:59:22

+1

Stackoverflow不是用於調試任何人的代碼的熱線服務。我會請downvoters自己提供一個解決方案,或者至少解釋他們的投票。在嘗試自己解決之前,不要試圖判斷別人。這不會幫助OP或任何訪問此頁面的人 – user568109 2013-02-27 17:39:51

1

最後我找到了解決辦法 - 那是因爲我使用的節點0.9.6 -pre。改爲0.8.21後,一切正常。

謝謝大家的幫助。

+0

使用節點0.9.6的問題是什麼?我有幾乎相同的問題。 – 2013-06-30 13:12:19

+0

謝謝你一個好朋友。花了2天的時間來調試這個問題並尋找問題後,我找到了這個線程。現在,我轉移到節點v0.10.16 – Durgesh 2013-10-08 19:44:52

相關問題