2016-12-28 42 views
0

我在Express中使用表單時遇到問題。如何使用Express從表單中獲取參數?

我的形式是非常直截了當:

<form action="/api/v1/items" method="post"> 
    <p> 
     <span>Name:</span><br> 
     <input type="text" id="name"> 
    </p> 
    <p> 
     <span>Priority:</span><br> 
     <input type="text" id="priority"> 
    </p> 
    <p> 
     <span>Comment:</span><br> 
     <input type="text" id="comment"> 
    </p> 
    <input type="submit" value="Add Item"> 
</form> 

這裏是端點的服務器上執行:

const express = require('express'); 

const router = express.Router(); 

router.post('/', (req, res, next) => { 
    const data = { 
     'name': req.body.name, 
     'priority': parseInt(req.body.priority), 
     'comment': req.body.comment 
    }; 

    // do something with the data 
}); 

module.exports = router; 

路線應正確註冊:

var app = express(); 
var items = require('./routes/items'); 

app.use('/api/v1/items', items); 

問題是,當提交表單時,req.body沒有參數。

我創建了使用快速產生,所以body-parser中間件應正確設置我的應用程序:

var bodyParser = require('body-parser'); 

... 

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

奇怪的是,如果我用curl張貼數據,參數正確發送:

curl --data "name=Something&priority=1&comment=Whatever" http://127.0.0.1:3000/api/v1/items 

由於curl的工作原理,這告訴我我的表單有些問題,儘管我不知道那裏可能會出現什麼問題。

我需要什麼,以獲得從表單提交的參數做才能在快速正確地分析?

+0

你肯定bodyParser初始化路線之前去? –

+0

@MykolaBorysyuk是 - bodyParser在路線註冊之前註冊。 – Andy

回答

2

輸入您的形式應該有name真是讓人不是id小號

<form action="/api/v1/items" method="post"> 
    <p> 
     <span>Name:</span><br> 
     <input type="text" name="name"> 
    </p> 
    <p> 
     <span>Priority:</span><br> 
     <input type="text" name="priority"> 
    </p> 
    <p> 
     <span>Comment:</span><br> 
     <input type="text" name="comment"> 
    </p> 
    <input type="submit" value="Add Item"> 
</form> 

您可能會發現specification on form submission有用。

+0

就是這樣。謝謝您的幫助! :) – Andy

相關問題