猫鼬交易

时间:2019-03-29 10:04:46

标签: mongoose error-handling transactions

我正在构建一个以node和mongo为驱动程序的小型应用程序。我正在使用猫鼬5.4.x版本。我正在执行交易。获取session.startTransactions不是函数。任何帮助都会很好。

以下是我到目前为止所做的代码,在将一些数据推入数据库时​​得到了所述错误。

const router = express.Router();
const bcrypt = require('bcrypt');

const mongoose = require('mongoose');

const UserModel = require('../models/user');
const ShopDetailsModel = require('../models/shopDetailsModel');
// const validateRegisterInput = require('../validation/signUpValidation');

// Required Db Config
// const mongoURI = 'mongodb+srv://xxxx:xxxx@cluster0-vx5ok.mongodb.net/test?retryWrites=true',
const dbConfig = require('../configs/dbConfig').mongoURI;
// Mongo Connection Establishment
mongoose
    .connect(dbConfig, { useNewUrlParser: true })
    .then(() => console.log('MongoDB connected'))
    .catch((err) => { console.log(err) });

// @route POST /users/regiter
// @desc Register a New User / returns String
// @access Public
router.post('/register',
    (req, res) => {
        // const { errors, isValid } = validateRegisterInput(req.body);
        // Check Validation
        // if (!isValid) {
        //     return res.status(400).json(errors);
        // }
        const session = mongoose.startSession();
        session.startTransaction();
        UserModel.findOne({ contact: req.body.contact })
            .then(user => {
                if (user) {
                    return res.status(400).json({ msg: 'User Already Registered' });
                } else {
                    try {
                        const newShop = new ShopDetailsModel({
                            shopName: req.body.shopName,
                            shopId: req.body.shopName,
                            shopNo: req.body.shopNo,
                            street: req.body.street,
                            country: req.body.country,
                            state: req.body.state,
                            city: req.body.city,
                            pincode: req.body.pincode,
                            shopTelephone: req.body.shopTelephone,
                        });
                        let hashed = '';
                        bcrypt.genSalt(10, (err, salt) => {
                            if (err) throw err;
                            bcrypt.hash(req.body.password, salt, (err, hash) => {
                                if (err) throw err;
                                hashed = hash;
                                return hash;
                            })
                        })
                        const newUsr = new UserModel({
                            firstName: req.body.firstName,
                            lastName: req.body.lastName,
                            contact: req.body.contact,
                            shopDetails: newShop,
                            password: hashed,
                        });
                        newShop
                            .save()
                            .then(
                                newUsr
                                    .save()
                                    .then(user => res.status(200).json({ msg: `${user.firstName} ${user.lastName} registered Succesfully` }),
                                        session.commitTransaction(),
                                        session.endSession()
                                    )
                                    .catch(err => console.log(err),
                                        session.abortTransaction(),
                                        session.endSession()
                                    )
                            )
                            .catch(err => console.log(err),
                                session.abortTransaction(),
                                session.endSession()
                            )
                    } catch (e) {
                        console.log('Error generating the shop and user objects.', e);
                        session.endSession();
                    }
                }
            })
    }
);
module.exports = router;

0 个答案:

没有答案