访问userSchema(NodeJs和MongoDB)中的事务时,我得到“未定义”作为输出

时间:2019-01-28 13:56:41

标签: node.js mongodb mongoose

我期望的输出作为,它应该console.log()进行的交易到我的命令提示。它只能打印userSchema接受交易的所有对象。它正在打印“未定义”

[nodemon] 1.18.9
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node server.js`
Running on port 3000
Connection established
[nodemon] restarting due to changes...
[nodemon] restarting due to changes...
[nodemon] starting `node server.js`
 Running on port 3000
Connection established
5c4b294efb654f1770522264
{ _id: 5c4b294efb654f1770522264,
  email: 'dev@dev.com',
  username: 'username',
  password:
   'MY_SECRET_PASSWORD',
  privateKey:'MY_PRIVATE_KEY',
  __v: 0 }
undefined
POST /api/getTransactions 200 264.266 ms - -

这是POST路线

router.post('/getTransactions', function (req, res) {
    userId = req.body._id
    console.log(userId)
    //console.log(process.env.NODE_ENV)
    User.findOne({ _id: userId }, function (err, user) {
        console.log(user)

        if (user) {
            console.log(user.transactions)
            res.send(user.transactions)
        } else {
            console.log(err)
        }

    })
})

这是用户模式

var TransactionSchema = new Schema({
       time: {
           type: String
    },
    date : {
        type: String
    },
    transactionType : {
        type: String
    },
    email : {
        type: String
    },
    amount: {
        type: String
    },
    txHash:{
        type: String
    }
})

var UserSchema = new Schema({
    username: {
        type: String
    },
    email: {
        type: String,
    },
    password: {
        type: String
    },
    ethAddress: {
        type: String
    },
    privateKey: {
        type: String
    },
    transactions: TransactionSchema,
})

2 个答案:

答案 0 :(得分:0)

可能是这种情况,但是您提供的一些详细信息似乎并未存储交易。 发生交易时,您必须将交易从进行交易的地方(首先保护它)推入交易字段(在您的代码中似乎不是数组)。

据我所知,根据您提供的代码,我会说您应该:

  • 使您的交易字段中包含TransactionSchema的数组
  • 将您进行事务处理(在mongoDB中,请参见MongoDB Push

此后,当您获得user时,它现在应包括该用户进行的所有交易。

答案 1 :(得分:0)

var TransactionSchema = new Schema({
   time: {
       type: String
  },
  date : {
    type: String
  },
  transactionType : {
    type: String
  },
  email : {
    type: String
  },
  amount: {
    type: String
  },
  txHash:{
    type: String
  }
})

var UserSchema = new Schema({
  username: {
    type: String
  },
  email: {
    type: String,
  },
  password: {
    type: String
  },
  ethAddress: {
    type: String
  },
  privateKey: {
    type: String
  },
  transactions: [
    type: mongoose.Schema.Types.ObjectId,
    ref: 'TransactionModel' // this should be the name of your 
    // transactions model
    }
  ]
})

那么您应该查询

User.findOne({ _id: userId })
.populate('transactions')   
.then(user => {
  console.log(user)
})
.catch(e => {
  consoel.log('error')
});

请使用我的诺言,因为我发现它更容易,您可以将其转换为回调函数


希望对您有帮助