【问题标题】:Cannot send multiple form data to routes in Node.js using req.body无法使用 req.body 将多个表单数据发送到 Node.js 中的路由
【发布时间】:2017-12-04 06:53:34
【问题描述】:

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

如果它只是一条数据,我可以轻松地做到这一点,因为 req.body 对象允许一个键值对(名称和值)。事实上,我是用删除按钮完成的,它通过发送主键然后删除行来正常工作。

对于保存按钮,我认为解决方案是传入“this”对象。但是,即使在 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)。我已经改变了很多次,我不记得它应该是哪种方式,但我还是卡住了。

【问题讨论】:

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


    【解决方案1】:

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

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

    在你的路线上

    var somevar = req.body.somename;
    

    【讨论】:

      猜你喜欢
      • 2019-04-30
      • 2018-08-09
      • 2019-12-26
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多