【问题标题】:Get field value from form with busboy使用 busboy 从表单中获取字段值
【发布时间】:2018-09-06 15:28:52
【问题描述】:

如何使用 busboy 从“val”参数中检索单个字段值?

.js

app.post('/somewhere', (req, res) => {
    req.busboy.on('field', function(fieldname, val) {
       //var foo = val.name;
       //var bar = val.number;
    });
});

.html

<input type="text" name="name"><br>
<input type="tel" name="number"><br>

根据busboy git

field [...] 为找到的每个新的非文件字段发出。

使用提供的示例,我能够确定“var”由两个字符串组成:

typeof(val) 

string
string

但在那之后我一无所知:

  1. 此范围内的 val 是什么?一个变量?大批?还有什么?
  2. 如何从 val 访问特定元素?就像“名称”字段一样。

【问题讨论】:

  • 你为什么用req.busboy访问它?您是否将其作为 req 属性附加到之前的中间件中?

标签: node.js forms busboy


【解决方案1】:

Busboy 处理事件,因此从表单中获取特定元素的正确方法是自己实现一个保存表单数据的结构。

app.post('/somewhere', (req, res) => {

  let formData = new Map();
  req.busboy.on('field', function(fieldname, val) {
    formData.set(fieldname, val);
  });

  req.busboy.on("finish", function() {

    console.log(formData) // Map { 'name' => 'hi', 'number' => '4' }
    // here you can do 
    formData.get('name') //  'hi'
    formData.get('number') //  '4'

    // any other logic with formData here

    res.end()
  });
});

我不确定typeof val 是什么意思,但就我而言,val 始终是一个简单的字符串

【讨论】:

  • 你为什么在这里使用地图而不是直接的对象?我认为 Map 的存储类型必须具有一致性,而表单可能包含各种东西......
  • 当然,它可以是一个普通的对象。出于统一的原因,我使用 Map 是为了拥有与 browser's formData 类似的 API。另外我不认为地图必须只有一种类型的数据,事实上它们可以有任何东西,甚至可以作为键。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-09
  • 2012-07-12
  • 1970-01-01
相关资源
最近更新 更多