Node.jsで検索結果を全て表示したいです(fetchAllができません)
発生している問題
Node.js + Express + mysqlです。
データベースには以下の様なデータを保存しています。
id name comment
1 カレー test1
2 シチュー test2
3 カレー test3
料理名(name)を検索をしてその結果を表示するようにしているのですが、「シチュー」の様に1つだけの場合は検索結果を表示することができるのですが、「カレー」の様に2つ以上ある場合にはfetchで1つしか検索結果を表示することができません。
検索結果をすべて表示するためにfetchをfetchAllに変え、検索結果を表示する部分をforでループさせてみましたが上手くいきませんでした。
どうすれば検索結果を全て表示することができるでしょうか?
また、検索結果が0個(例えば「味噌汁」を検索)の場合にエンドレスに検索を続けてしまうためなのか検索が終わらずページが更新できない問題が出てしまいます。
可能であればそちらの解決方法もご教授頂けると幸いです。
よろしくお願いいたします。
該当のソースコード
<body>
<div role="main">
<form method="post" action="/hello/add" name="test">
<div>
<span>料理名:</span>
<input type="text" name="name" value="<%= form.name %>">
</div>
<div>
</td><input type="submit" value="検索">
</div>
</form>
</div>
<div>
<% if (mydata != null){ %>
<% for (var i in content) { %>
<p><ul>
<li><%- content[i].id %></li>
<li><%- content[i].attributes.name %></li>
<li><%- content[i].attributes.comment %></li>
</ul></p>
<% } %>
<% } %>
</div>
</body>
var express = require('express');
var router = express.Router();
var mysql = require("mysql");
var knex = require("knex")({
dialect: "mysql",
connection: {
host : "localhost",
user : "root",
password : "",
database : "db",
charset : "utf8"
}
});
var Bookshelf = require("bookshelf")(knex);
var MyData = Bookshelf.Model.extend({
tableName: "mydata"
});
//MySQLの設定情報
var mysql_setting = {
host : "localhost",
user : "root",
password : "",
database : "db"
};
//ADD
router.get("/add", (req, res, next) => {
var data = {
form: {name:""},
mydata: null,
}
res.render("hello/add", data);
});
router.post('/add', (req, res, next) => {
new MyData().where("name", "=", req.body.name).fetchAll({withRelated: ["user"]}).then((collection) => {
var data = {
form: req.body,
mydata: collection,
content: collection.toArray()
};
res.render("hello/add", data);
})
});
module.exports = router;