Транзакции в мангусте - PullRequest
       28

Транзакции в мангусте

0 голосов
/ 29 марта 2019

Я создаю небольшое приложение с нодом и монго с мангустом в качестве драйвера.Я использую версию mongoose 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;
...