2013-03-10 53 views
4

我有一個簡單的表單,它使用Express將POST數據發送到Node.JS服務器。這是以下形式:用Express表單接收req.body與郵件表單node.js

<form method="post" action="/sendmessage"> 
    <div class="ui-widget"> 
     <input type="text" id="search" data-provide="typeahead" placeholder="Search..." /> 
    </div> 
    <textarea id="message"></textarea> 
</form> 

與UI窗口小部件和輸入相關型號與typehead,從Twitter自動完成庫。 這是我如何處理在服務器POST請求:

app.post('/sendmessage', function (req, res){ 

    console.log(req.body); 

    usermodel.findOne({ user: req.session.user }, function (err, auser){ 

     if (err) throw err; 

     usermodel.findOne({ user: req.body.search }, function (err, user){ 

      if (err) throw err; 

      var message = new messagemodel({ 

        fromuser: auser._id, 
        touser: user._id, 
        message: req.body.message, 
        status: false 

      }); 

      message.save(function (err){ 

        if (err) throw err; 

        res.redirect('/messages') 

      }) 

     }); 

    }); 

}); 

控制檯顯示我「{}」,然後用req.body.search一個錯誤,因爲search沒有定義。我不知道這裏發生了什麼,也不是與typehead輸入有關的問題。這個問題的任何解決方案...?

謝謝先進!

+0

我想補充控制檯檢查到處檢查什麼'req.body'被輸出爲好,如果'req.body'是空的那麼我會看看你傳遞給/ sendmessage的方式有什麼問題 – germainelol 2013-03-10 13:28:25

+0

嘗試在輸入字段中添加一個名稱=「搜索」屬性。 – JohnnyHK 2013-03-10 14:12:13

回答

18

req.body由名稱和值。

在搜索框中添加name="search",然後再試一次。

你也必須使用快遞/ connect.bodyParser()中間件,感謝尼克Mitchinson!

+2

此外,我會確保您使用了Express/Connect bodyParser。如果不是,Express不會填充req.body對象。 – 2013-03-10 18:25:53

+1

我爲什麼要敲我的頭,我的request.body是空的,然後意識到,我的輸入應該有名字。經典傻瓜:D。謝謝.. – 2016-03-25 17:41:51

10

我有這個問題,原來我是用app.use(express.bodyParser());,但它是我用的代碼之後。移動它解決了這個問題。

+6

非常重要的答案 - Express對app.use()配置對象中的任何東西的位置都非常挑剔。我遇到了app.use(express.bodyParrser())不起作用的問題,因爲我是從外部文件聲明我的路由,並在調用app.use(express.bodyParser())之前初始化它們。 – netpoetica 2013-08-03 13:12:14

+2

謝謝,這是正是我的問題:) – alvarodms 2016-03-15 13:32:58

0

在我來說,它是由我的應用程序重定向到http造成https。 正在更新Facebook使用https uri修復了它。

6

表達4將是這一個。 (請注意,這不會解析多部分/上傳)。

app.use(bodyParser.urlencoded({extended: true})); 

,如果你想獲得JSON輸入

app.use(bodyParser.json());