我有一个设置有Node / Express后端的html / handlebars表单。该表单提供了从数据库填充的选项。我可以获取返回单个用户选择值的表单并将其保存到我的mongodb中,但是我确实需要整个对象。
{{#each proxyObj}}
<p>
<label>
<input type="radio" name="proxyTitle" value="{{title}}"/>
<span>{{title}}</span>
</label>
</p>
{{/each}}
这是快递:
router.post("/proxies/:id", ensureAuthenticated, (req, res) => {
Project.findOne({
_id: req.params.id
}).then(project => {
const newProxy = {
proxyTitle: req.body.proxyTitle
// I need the other object values to go here, or to be able to retrieve them later
};
// Add to proxy array on the Project object in the collection
project.proxies.push(newProxy);
project.save().then(project => {
res.redirect(`/projects/stakeholders/${project.id}`);
});
});
});
尝试将整个对象作为值输入到输入字段中,还是返回对象的id并在db中查找,是否更明智?我需要在同一页面上显示一些返回的对象信息,并在以后使用。哪一种效率更高?什么是最好的方法?
答案 0 :(得分:0)
如果我做对了,问题是您试图在<input type="radio" name="proxyTitle" value="{{title}}"/>
的一种表单上放置多个具有相同名称的输入,这会给您类似的信息
<input type="radio" name="proxyTitle" value="Title 1"/>
<input type="radio" name="proxyTitle" value="Title 2"/>
<input type="radio" name="proxyTitle" value="Title 3"/>
如here所述,浏览器会对其进行咀嚼,但是服务器端的处理可能需要进行一些调整。
对于您而言,最简单的解决方法是将索引添加到参数名称中。因此,您的表单将如下所示:
{{#each proxyObj}}
<p>
<label>
<input type="radio" name="proxies[{{@key}}]" value="{{this}}"/>
<span>{{this}}</span>
</label>
</p>
{{/each}}
(请注意,如果proxyObj
是一个数组,则必须使用@index
而不是@key
;此外,根据proxyObj
字段的结构,您可能必须使用this.title
作为要显示的值,什么都不要。)
对于服务器端处理,您必须循环浏览收到的proxies
并逐一处理它们,例如
router.post("/proxies/:id", ensureAuthenticated, (req, res) => {
Project.findOne({
_id: req.params.id
}).then(project => {
project.proxies = []; // this is only in case you wanna remove the old ones first
const proxies = req.body.proxies;
for(let i = 0; i < proxies.length; i++) {
// Add to proxy array on the Project object in the collection
project.proxies.push({ proxyTitle: proxies[i].title });
}
project.save().then(project => {
res.redirect(`/projects/stakeholders/${project.id}`);
});
});
});