尽管我尽了最大的努力,但我仍然坚持获取提交给 NodeJS 和 Express 的表单元素的数组键以及把手。
我的表单元素如下所示:
{{#each block}}
<input type='text' name='block_payout[{{id}}]' />
{{/each}
Run Code Online (Sandbox Code Playgroud)
这会在浏览器中产生以下标记:
<input type='text' name='block_payout[14]' />
<input type='text' name='block_payout[15]' />
<input type='text' name='block_payout[16]' />
Run Code Online (Sandbox Code Playgroud)
在 PHP 中,这将导致一个数组作为 $_POST 数组的一个元素:
$_POST [
block_payout [
14 => value1
15 => value2
16 => value3
]
]
Run Code Online (Sandbox Code Playgroud)
然而,Node/Express 中的 req.body 属性删除了这些键并创建了一个索引数组:
req.body [
block_payout [
0 => value1
1 => value2
2 => value3
]
]
Run Code Online (Sandbox Code Playgroud)
由于我想使用密钥将提交的值与其他值联系起来,这对我来说是一个大问题。有谁知道如何使用正确的密钥获取提交的表单数据?
我正在使用Handlebars(使用express3-handlebars)模板和Passport在NodeJS应用程序中进行身份验证.一切都很好但我想知道是否有办法将Passport创建的req.user对象全局传递给Handlebars.
所以我的标题部分可能看起来像这样:
<header>
<h1>My Title</h1>
{{#if user}}
<p>Hello {{user.name}}</p>
{{else}}
<p>Please <a href='/login'>Log In</a></p>
{{/if}}
</header>
Run Code Online (Sandbox Code Playgroud)
就目前而言,我必须使用每个页面呈现显式传递用户对象:
app.get('/', function(req, res){
res.render('home', {
page_title: 'welcome',
user: req.user
});
});
Run Code Online (Sandbox Code Playgroud)
这似乎是错误的方式,因为我需要在每个页面上,我不能只设置一次并让所有页面都可以访问它吗?
我实例化Handlebars时无法做到这一点,因为它依赖于用Passport登录的用户,但情况并非总是如此.
创建一个全局'page_options'对象,将它附加并传递给每个渲染器是正确的解决方案还是Handlebars/Express有办法处理这个问题?