如何在node.js上获取类的属性及其方法
我是Node.js的新手。在这里,我用一些方法创建了一个用户模型,比如如何在node.js上获取类的属性及其方法,node.js,mongodb,Node.js,Mongodb,我是Node.js的新手。在这里,我用一些方法创建了一个用户模型,比如save,addToCart,findById等等 这是我的用户模型 const getDb = require('../util/database').getDb; const mongoDb = require('mongodb'); const objectId = mongoDb.ObjectID; module.exports = class User { constructor (username, e
save
,addToCart
,findById
等等
这是我的用户模型
const getDb = require('../util/database').getDb;
const mongoDb = require('mongodb');
const objectId = mongoDb.ObjectID;
module.exports = class User {
constructor (username, email, cart, id){
this.username = username;
this.email = email;
this.cart = cart; // {items : []}
this._id = id;
}
save(){
const db = getDb();
return db.collection('users').insertOne(this)
.then(result => {
console.log("User Created Succesfully");
})
.catch(err => {
console.log(err);
})
}
addToCart(product){
const updateCart = { items : [{productId: new objectId(product._id), quantity : 1}]};
const db = getDb();
return db.collection('users')
.updateOne({_id: new objectId(this._id)}, {$set: {cart: updateCart } })
.then(result => {
console.log(result);
})
.catch(err => {
console.log(err);
})
}
static findById(userId){
const db = getDb();
return db.collection('users').find({_id: new objectId(userId)}).next();
}
}
开始时,我通过以下方法创建一个req.user:
app.use((req,res,next) => {
User.findById('5de9f4f7f099c426505c0c9e')
.then(user => {
console.log(user);
req.user = new User(user.username,user.email, user.cart, user._id);
next();
})
.catch(err => {
console.log(err);
});
});
尽管如此,我得到的都是okreq.user
,但是当我试图从另一个脚本调用用户模型的方法时,我无法访问用户模型的方法addToCart
下面是我调用user方法的代码
exports.postCart = (req, res, next) => {
const prodId = req.body.productId;
Product.findById(prodId, product => {
console.log(req.user);
return req.user.addToCart(product);
})
.then(result => {
console.log("Shop",result);
})
.catch(err => {
console.log(err);
})
//res.redirect('/cart');
}
控制台上没有错误。但是,购物车属性没有得到更新。如何才能做到这一点?首先,您没有保存req.user,第二件事是:尽量不要这样做,因为mongoose文档很重。它们会使您的请求对象变得不必要的庞大。很抱歉,我无法理解,因为我是node.js的新手。您应该只在请求控制器中创建资源,而不是在中间件中创建资源。