2016-12-28 85 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

相关问题