1

Jade テンプレート エンジンまたはその他に問題があります。私は知らない。オブジェクトをループしてそのプロパティを出力すると、「country」プロパティが出力されないように見えますが、「id」および「 _v」プロパティは正常に出力されます。「セクション」プロパティはオブジェクト自体であるため、出力されないと予想されますが、コンソール ログには何も表示されませんでした。

スキーマ:

var CSVSchema = {
    country: {type: String}
,   sections: [
        {
            title: {type: String}
        ,   sub_sections: [
                {
                    title: {type: String}
                ,   value: {type: String}
                }

            ]
        }
    ]   
};

検索コントローラー: これは、mongodb データベースで国を検索し (mongoose を使用)、囲まれたプロパティを渡す Jade テンプレートをレンダリングします。

exports.query = function (req, res) {

    var query = req.body.query;
    results.find({"country": query}, function (err, data){
        res.render('search/query', {
            title: 'Search Query'
        ,   query: req.body.query
        ,   results: data
        ,   message: req.flash('error')
        })
    });


}

mongodb からの JSON オブジェクト: これは data 変数に格納され、検索コントローラーを介して Jade テンプレートに渡されます。何らかの理由で国プロパティが _id プロパティの前に表示されていますが、セクションはそうではありませんか? _idの後にを配置するように mongodb のエントリを編集しましたが、何も修正されませんでした。

{ country: 'India',
  _id: 51cda5163c7286000000000c,
  sections: 
   [ { sub_sections: [Object],
       _id: 51cda5163c72860000000011,
       title: 'Undergraduate' },
     { sub_sections: [Object],
       _id: 51cda5163c7286000000000d,
       title: 'Postgraduate' } ],
  __v: 0 }

Jade テンプレート: Jade のレンダリングに問題がないことをテストするために、テスト プロパティを挿入して正常に出力されたかどうかを確認しました。

for result in results
        - result.test = 'TESTING123'
        ul
            li #{result._id}
            li #{result.test}
            li #{result.country}
            li #{result.sections}
            li #{result.__v}

出力:

  • 51cd926b46baa54df700000c
  • テスト123
  •  
  •  
  • 0

Package.json: Jade 0.30.x にダウングレードしようとしたところ、テンプレートが壊れて、「本体が定義されていませんか?」という行に何かが表示されました。

{
    "name": "test",
    "description": "test",
    "keywords": [
        "express",
        "mongoose",
        "mongodb",
        "passport"
    ],
    "version": "0.0.1",
    "private": true,
    "engines": {
        "node": "0.10.x",
        "npm":  "1.2.x"
    },
    "dependencies": {
        "express": "3.3.1",
        "jade": "0.31.x",
        "mongoose": "3.6.13",
        "connect-mongo": "0.3.2",
        "connect-flash": "0.1.1",
        "passport": "0.1.17",
        "passport-local": "0.1.6",
        "csv": "0.3.3",
        "moment": "2.0.0"
    },
    "devDependencies": {
        "mocha": "1.11.0",
        "nodemon": "0.7.8"
    }
}
4

2 に答える 2

3

オブジェクトを Jade テンプレートに渡す前に文字列化して解析することで、この問題を解決しました。

results = JSON.parse(JSON.stringify(results))
于 2013-07-09T09:41:42.617 に答える
2

Jade テンプレートに渡すオブジェクトはdata、Jade が必要とするプレーンな JS オブジェクトではなく、モデル インスタンスの配列です。lean()これを修正する最もクリーンな方法は、クエリ メソッド チェーンに呼び出しを挿入して、代わりに「無駄のない」Mongoose クエリを使用することです。

results.find({"country": query}).lean().exec(function (err, data){
    res.render('search/query', {
        title: 'Search Query'
    ,   query: req.body.query
    ,   results: data
    ,   message: req.flash('error')
    })
});

これにより、クエリも高速になります。

于 2013-07-02T12:59:14.457 に答える