Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在node.js上获取类的属性及其方法_Node.js_Mongodb - Fatal编程技术网

如何在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

我是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, 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);
    });
});
尽管如此,我得到的都是ok
req.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的新手。您应该只在请求控制器中创建资源,而不是在中间件中创建资源。