バカな質問してもいいですか?MongoDB からのデータが必要な選択リストを持つフォームがあります。まず、MongoDB (私は Mongoose を使用) からデータを取得し、それを配列に保存してから、ビューにレンダリングして HTML Select に入力します。
ファイル Task.js
exports.createForm = function (req, res) {
var creators = [];
CreatorModel.find({}).populate('id name').exec(function(err, crts) {
console.log("Creators:", crts);
creators = crts;
});
res.render('tasks/create-form', {
creators: creators
});
};
ファイル テンプレート
<p>
Creator:
<select id="creatorlist" name="creator">
{{#each creators}}
<option value="{{id}}">{{name}}</option>
{{else}}
<option value="">No creators</option>
{{/each}}
</select>
<a href="/creator/new">New Creator</a>
</p>
しかし、レンダリング関数をコールバックに埋め込むと、機能します
CreatorModel.find({}, function(err, creators) {
AssigneeModel.find({}, function(err, assignees) {
res.render('tasks/create-form', {
creators: creators,
assignees: assignees
});
});
});
しかし、後でタスクIDから正確な値を表示する必要があり、コードを改善するのが非常に難しいため、それは問題であることがわかりました
次に、コードを少し変更します
var creators = {};
CreatorModel.find({}).exec(function(err, crts) {
console.log("Type:", typeof(crts));
creators = crts;
console.log("Creators:", creators);
});
console.log("Creators 2:", creators);
コンソール ログを確認すると、「Creators 2」が最初に出力されていることがわかりました
Creators 2: {}
Type: object
Creators: [ { name: 'Jen Smith', _id: 51d3ec2933a3c53c57000001, __v: 0 },
{ name: 'Paul Scholes', _id: 51d3ec3933a3c53c57000002, __v: 0 } ]
Mongoose の find() は非同期で実行されているようです。
配列への割り当てに関する問題は、json ドキュメント obj をコールバック関数で配列に変換できないことですか? MongoDb から HTML Select Tag に日付を入力する他の方法はありますか?