我的ejs中有一个带有几个复选框的表单。在应用程序中,用户应该能够通过选中复选框来选择他的兴趣,这应该保存到sqlite数据库表中。我正在通过bootstrap构建表:
db.exec('CREATE TABLE interests(interest text)');
(不确定要选择哪种类型,所以我将其设置为“文本”,但这很可能是错误的?)。我的表单如下所示
<form name="first_steps" action="first_steps" method="post">
<ul>
<li>
<input type="checkbox" name="interesse" value="theater" id="check1">Theater</label>
</li>
<li>
<input type="checkbox" name="interesse" value="musik" id="check2">Musik</label>
</li>
<li>
<input type="checkbox" name="interesse" value="party" id="check3">Party</label>
</li>
<li>
<input type="checkbox" name="interesse" value="sport" id="check4">Sport</label>
</li>
</ul>
<input type="submit" value="submit">
null
我发现这篇文章用javascript将结果复选框保存到sqlite数据库中,并尝试将其转换到我的server.js中
(类似这样的东西
app.post('/first_steps', function(req, res) {
var elementen = document.getElementsByName ("interesse");
var tmpChoise;
for (var r= 0; r < elementen.length; r++) {
if (elementen[r].checked) {
tmpChoise = elementen[r].value;
alert(tmpChoise);
db.run(`INSERT INTO interessen(interesse) VALUES (?)`, [interesse], function(err) {
return res.redirect('/profil');
});
}
}
});
但这不管用。它说“referenceerror:document is not defined”)。
有人能告诉我正确的代码是什么样子的吗?我是个新手,什么都想不出来。
(Javascript、express、sqlite3、Node.js)
server.js文件通常应该工作从表单发布的数据。进程应该类似于:
在您的情况下,不应该尝试查看从document.getElementsByName(“interesse”)
中生成的DOM元素,而应该使用存储在res.body
中的数据。这样看起来就像:
app.post('/first_steps', function(req, res) {
data = req.body.interesse;
db.run(`INSERT INTO interessen(interesse) VALUES (?)`, [data], function(err) {
return res.redirect('/profil');
});
}
}
});
或者类似的东西。查看本文获取post数据的示例,然后查看从您的表单发布到控制台日志中的数据,如
var postBody = req.body;
console.log(postBody);
(控制台日志输出将位于运行express服务器任何终端中)