3

mongoose.js を使用して、いくつかのデータセットを MongoDB に保存しました。しかし、express.js と ejs を使用して html サイトに表示すると問題が発生しました。

これが私のシナリオです:

モデル

var mongoose = require('mongoose');

var Schema = mongoose.Schema;
var ObjectId = Schema.ObjectId;

var ItemSchema = new Schema({
    _id: ObjectId,
    creationTime: Date,
    modificationTime: Date,
    title: String
});
var Item = mongoose.model('item', ItemSchema);
module.exports.Item = Item;

ルート:

app.get('/item/:id', function(req, res) {

    Item.findById(req.params.id, function(err, doc){

        console.log(doc); //This check displays everything correctly on console

        res.render('item.html.ejs', {
            item : doc
        });
    });
});

意見:

<h1><%= item.title %>:</h1>
<p>Creation: <%= item.creationDate %></p>
<p>Modification: <%= item.modificationDate %></p>

この設定の結果、両方の日付がundefined.

MongoDB の ISODate 形式と関係があると思います。しかし、html ビューで表示するために変換する方法についての解決策が見つかりません。

私はあなたの助けに感謝します。乾杯

4

3 に答える 3

9

プロジェクトで moment.js を使用する次のヘルパーがあります。

date: function(date){
  moment(date).format('YYYY-MM-DD hh:mm:ss');
},
fromNow: function(date){
  moment(date).fromNow()
}
于 2012-06-04T09:43:14.170 に答える
1

コードをコピーして貼り付けただけの場合、解決策は非常に簡単です。

モデルで、テンプレートで作成Timeと変更を定義し、item.creationとitem.modificationTimeにアクセスしようとします。DateDate

その変更後、未定義以外のものが表示されるはずですが、おそらくこれを適切な日付形式に変換する必要があります。

于 2012-06-04T14:20:36.773 に答える
1

上記の例を使用して ejs フィルターを追加しましたが、機能させるために少し変更する必要がありました。

mongoose スキーマに 'created_at' 属性を作成し、save() で自動的に作成します。

var ItemSchema = new Schema({
    name    : { type: String, required: true, trim: true }
  , created_at    : { type: Date }
});


ItemSchema.pre('save', function(next){
  if ( !this.created_at ) {
    this.created_at = new Date;
  }
  next();
});

瞬間をインストールします(そしてpackage.jsonに書き込みます)

npm install moment --save

app.js または ejs のフィルターを定義するその他の場所にフィルターを追加します。

var moment = require('moment');

ejs.filters.fromNow = function(date){
  return moment(date).fromNow()
}

page.ejs でフィルターを使用する

<span class="created_at"><%=: item.created_at | fromNow %></span>
于 2012-10-01T09:02:54.137 に答える