从jade的模板表单传递一些参数到我的服务器时遇到一个奇怪的问题。
这是上下文,表单用于搜索电影,每个电影都可以通过一系列类型来表征。在我的表单中有一个复选框列表,如下所示:
div Genre :
br
label(for="genre") Drama
input(type="checkbox", name="genre", value="Drama")
label(for="genre") Crime
input(type="checkbox", name="genre", value="Crime")
label(for="genre") Thriller
input(type="checkbox", name="genre", value="Thriller")
label(for="genre") Action
input(type="checkbox", name="genre", value="Action")
label(for="genre") Adventure
input(type="checkbox", name="genre", value="Adventure")
label(for="genre") Sci-Fi
input(type="checkbox", name="genre", value="Sci-Fi")
label(for="genre") Biography
input(type="checkbox", name="genre", value="Biography")
label(for="genre") Comedy
input(type="checkbox", name="genre", value="Comedy")
label(for="genre") Music
input(type="checkbox", name="genre", value="Music")
label(for="genre") Romance
input(type="checkbox", name="genre", value="Romance")
问题出在服务器端,当检查多个复选框时,每个方法都可以正常工作。例如,如果我检查“戏剧”和“犯罪”,我可以看到req.body.genre [0]包含“戏剧”,而req.body.genre [1]包含“犯罪”和 req.body.genre .length等于2 。
问题是如果我只检查一种类型,例如“戏剧”。 req.body.genre.length等于5 ,所有内容都存储为:
当我只检查一种类型时出现问题,无论哪种类型。我不明白为什么!
我正试图动态构建一个查询:
// If a genre was selected
if (req.body.genre.length > 0)
{
// If more than 1 genre was selected
if (req.body.genre.length > 1)
{
query["genres"] = {};
query["genres"]["$in"] = req.body.genre;
}
else
{
query["genres"] = req.body.genre;
}
}
感谢您的帮助
答案 0 :(得分:1)
试试这个:
input(type="checkbox", name="genre[]", value="Drama")
换句话说,不要使用genre
作为名称,而是使用genre[]
(适用于所有INPUT
元素)。
这告诉bodyParser
中间件应始终将结果解析为数组(而不是在仅选中一个复选框时返回字符串,如果选择了多个复选框则返回一个数组,这就是您的情况中发生的情况) )。
您仍然可以在服务器上以req.body.genre
的形式访问结果。
答案 1 :(得分:0)
我认为可能是因为当只检查1时,你没有收到一个数组,而是一个字符串。那个字符串长度,例如“戏剧”是5.那么你最终将所有字母分开。