3

データベースからすべてのモデルを取得し、次のコードを使用してページに表示することに問題はありません。

index: function(req, res) {
    Applicant.find(function(err, applicants) {
        if (err) {
            return console.log(err);
        }else{
            res.view({
                apps: applicants
            });
        }
    });
} 

しかし、モデルを 1 つだけ取得して表示しようとすると、ブラウザーがロード中にスタックします。これは、1 つのモデルのみをプルするために使用するコードです。

display: function(req, res) {
    Applicant.find().where({id: 2}).done(function(err, appl) {
        if (err) {
            return console.log('HAI');
        }else{
            res.view({
                applicant: appl
            });
        }
    });
}
4

2 に答える 2

3

おそらく、Applicant を見つけようとしているときにエラーが発生し、コードが応答を返さないため、ブラウザーがスタックしている可能性があります。したがって、ブラウザは永遠に応答を待ちます。このようなものを試してください

if (err) {
    console.log('HAI');
    return res.send(err, 500);
}

PS ちなみに、Sails v0.9 の時点では、find()レコードが 1 つしか見つからない場合でも、メソッドは常に配列を返します。ID で 1 つのレコードだけを検索し、ビューに単一のオブジェクトを期待する場合は、メソッドを使用できますfindOne()

于 2013-08-14T14:56:13.437 に答える
1

.find() returns an array. You may be expecting a single applicant object.

Using appl[0] would solve this. Please note that Sails' Waterline ORM provides .findOne() for situations such as these. Here's more info on .findOne()

display: function(req, res) {
    Applicant.find().where({id: 2}).done(function(err, appl) {
        if (err) {
            return console.log('HAI');
        }else{
            res.view({
                applicant: appl[0]
            });
        }
    });
}

Or better yet...

display: function(req, res) {
    Applicant.findOne({id: 2}, function(err, appl) {
        if (err) {
            return console.log('HAI');
        }else{
            res.view({
                applicant: appl
            });
        }
    });
}
于 2013-08-14T20:32:06.180 に答える