无法使用req.body将多个表单数据发送到Node.js中的路由

时间:2017-12-04 06:53:34

标签: javascript node.js express post handlebars.js

我正在尝试根据管理员对表单中的表进行更改来修改数据库中的数据。我的问题是下面的保存按钮,我需要发送五条信息进行更新: 1.字 2.更换 3. replacementMethod 活跃的 5. id

如果它只是一个数据,我可以很容易地做到这一点,因为req.body对象允许一个键值对(名称和值)。事实上,我使用删除按钮执行此操作,它通过发送主键然后删除行正常工作。

对于保存按钮,我认为解决方案只是传入"这个"宾语。但是,即使在router.post函数中访问任何属性也会显示为未定义或我得到{data:' [object Object]'我似乎无法访问对象数据。我尝试了很多不同的方法和console.log打印输出并搜索互联网无济于事。有人能告诉我正确的方法吗?我花了半天时间在这上面并没有得到任何结果。谢谢。

<table>
<tr>
    <th>Banned Word</th>
    <th>Replacement</th>
    <th>Replacement Method</th>
    <th>Active</th>
    <th>Remove Word</th>
    <th>Save Changes</th>
</tr>
{{#each bannedwords}}
<tr>
    <td contenteditable='true'>{{this.word}}</td>
    <td contenteditable='true'>{{this.replacement}}</td>

    {{#ifCond this.replacementMethod 0}}
        <td class='select'> 
            <select>        
                <option value="0" selected>Replacement</option>
                <option value="1">Stars</option>
                <option value="2">Grawlix</option>   
            </select>
        </td>
    {{/ifCond}}

    {{#ifCond this.replacementMethod 1}}
        <td class='select'> 
            <select>        
                <option value="0">Replacement</option>
                <option value="1" selected>Stars</option>
                <option value="2">Grawlix</option>   
            </select>
        </td>
    {{/ifCond}}

    {{#ifCond this.replacementMethod 2}}

    <td align='center' class='select'> 
            <select>        
                <option value="0">Replacement</option>
                <option value="1">Stars</option>
                <option value="2" selected>Grawlix</option>   
            </select>
    </td>
    {{/ifCond}}

    {{#if this.active includeZero=false}}
        <td><input type="checkbox" onclick="return true;" checked/></td>
    {{else}}
        <td><input type="checkbox" onclick="return true;" /></td>
    {{/if}}
    <td><button formmethod="POST" formaction="/deleteWord" type="Delete" name="word" value="{{this.word}}"  class="btn btn-primary">Delete</button></td>
    <td><button formmethod="POST" formaction="/modifyWord" type="Save" name="data" value="{{this}}" class="btn btn-primary">Save</button></td>
</tr>
   {{/each}}
</table>   

在我的路线index.js中我有:

router.post('/modifyWord',isAdminMiddleware(), function(req, res, next){
modifyBannedWord(req);
res.redirect('/admin');
});

最后:

function modifyBannedWord(req){
const db = require('../db.js');
var temp = req.body;
db.query('UPDATE from badwords set word = ?,  replacement = ?, replacementMethod = ?, active = ?  , WHERE id = ?' , [temp.data.word , temp.data.replacement, temp.data.replacementMethod, temp.data.active, temp.data.id], function(err, results){
});
}

另外,modifyBannedWord函数可能不正确(即var temp = req.body)。我已经多次改变它,我不记得它应该是哪种方式,但我仍然被卡住了。

1 个答案:

答案 0 :(得分:0)

您必须像这样命名选择标签

<select name="somename"></select>

并在你的路线

var somevar = req.body.somename;