0

node.js + express + mongodb + mongooseを使用して、カスタムIDでデータベースからユーザーを取得しようとすると、ID値のデータ型が正しくないため、ページが完全に空に戻ります。コードの一部を次に示します。

var User = new Schema({
  name: String , 
  email: String ,
  id: Number,
  role: String
});
var userModel = mongoose.model('User', User);
var person = new userModel();

function loaduser(req, res, next) {
  userModel.find({}, req.params.id, function(err, user){
    if (user){
      req.user = user;
      console.log(user);
      next();
    }
  })
  console.log(typeof req.params.id);
};

//personal page route
app.get('/user/:id', loaduser, function(req, res){
  res.render('show', { users: req.user });
});

そして、これはコンソールに返されます:

string
{ _id: 5012aa222c2d4d5876c5acd0,
    email: 'alex@mail.com',
    id: '0',
    name: 'alex',
    role: 'admin' },

id の型をNumberとして宣言しましたが、 Stringとして返されます。どんな提案も大歓迎です:)

4

2 に答える 2

0

あなたのfind呼び出しは正しくありません。最初のパラメーターはクエリ ドキュメントである必要があります。1 つのドキュメントを探しているので、findOne代わりに使用する必要があります。req.params.idまた、数値に変換する必要があります。

userModel.findOne({ id: Number(req.params.id) }, function(err, user){

文字列として返される問題が引き続き発生する場合idは、コレクション内の文字列である必要があります。

于 2012-07-28T18:26:12.363 に答える
0

req.params.idで間違っているようです

userModel.find({}, req.params.id, function(err, user){


そのはず

userModel.find({}, { id: parseInt(req.params.id) }, function(err, user){

于 2012-07-28T18:04:08.360 に答える