Создавать пользовательский контент, используя Mongoosejs, приложение для входа в систему? - PullRequest
0 голосов
/ 16 апреля 2019

Приложение разработано с использованием Express.js и MongoDB. В приложение будут входить пользователи, сеанс будет поддерживаться. Это приложение для выставления счетов.

Есть пять моделей:
* Пользователь,
* Счет,
* Оплата,
* Клиент,
* Товар.
У каждого пользователя кроме "ref" запрограммировано >> userID: req.user._id.

Когда пользователь входит в систему с идентификатором пользователя, все данные, относящиеся к счетам, платежам, клиентам и продуктам, сохраняются для обеспечения уникальности.

Система работает отлично, пока не будет объяснен вышеописанный поток.

Теперь, постановка задачи ...

«Приложение должно отображать пользовательские счета, платежи, клиентов и продукты при входе пользователя в систему и, очевидно, в отношении пользователя, но этого не происходит»

Как я структурировал приложение?

Я использовал mongoose.js для работы с MongoDB. Каждая модель выше представляет коллекцию, связанную. При обработке любого из счетов, платежей, клиентов или продуктов также указывается код «.populate (пользователь)».

Ниже приводится модель пользователя:

// User Model
const mongoose = require('mongoose');

const Schema = mongoose.Schema;


// Create Schema
const UserSchema = new Schema({
    name: {
        type: String,
        required: true
    },
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    username: {
        type: String,
        required: true
    },
    date: {
        type: Date,
        default: Date.now
    }
});

module.exports = User = mongoose.model('users', UserSchema);

Ниже приводится модель счета-фактуры:

const mongoose = require('mongoose');

const Schema = mongoose.Schema;

let ObjectId = mongoose.Types.ObjectId;

// Create Schema
const InvoiceSchema = new Schema({
    inv_no: {
        type: Number,
        required: true
    },
    date: {
        type: Date,
        default: Date.now,
        required: true
    },
    c_name: {
        type: String,
        required: true
    },
    item_code: {
        type: String,
        required:true
    },
    item_desc: {
        type: String,
        required: true
    },
    qty: {
        type: Number,
        required: true
    },
    price: {
        type: Number,
        required: true
    },
    total: {
        type: Number,
        required: true
    },
    userId: {
        type: ObjectId,
        ref: 'users',
        required: true
    }
});

module.exports = Invoice = mongoose.model('invoices', InvoiceSchema);

Ниже приведен пример маршрута для пользователей:

Invoice.get('/invoices', passport.authenticate('jwt', {session: false}),  (req, res) => {
    if(req.session && req.cookies) {
        res.append('Authorization', req.cookies.jwt);

        /* Find Data */

        // Invoice Collection Block 
        Invoice.
            find()
            .populate('users', 'username')
            .then(invoiceData => {
                let inv_number;
                if(invoiceData.length >= 1) {
                    inv_number = invoiceData.slice(-1)[0].inv_no;
                    inv_number = inv_number + 1;
                }
                else if(invoiceData.length === 0) {
                    inv_number = 1;
                }

                // Clients Collection Block
                Client
                    .find()
                    .then(clientData => {

                        // Products Collection Block
                        Product
                            .find()
                            .then(productData => {

                                if(clientData && productData) {
                                    // Rendering Block   
                                    res.render('invoices', {
                                        user: req.user.name,
                                        sno: inv_number,
                                        client: clientData,
                                        items: productData
                                    });  
                                }
                                else {
                                    // Rendering Block   
                                    res.render('invoices', {
                                        user: req.user.name,
                                        sno: inv_number,
                                        client: null,
                                        items: null
                                    });
                                }
                            })
                            .catch(errPrd => console.log(errPrd));
                    })
                    .catch(errClt => console.log(errClt));;
            })
            .catch(errInv => console.log(errInv));
    }
    else {
        res.redirect('/');
    }
});

1 Ответ

0 голосов
/ 16 апреля 2019

В вашей схеме счета userId ссылается на пользователей.

    Invoice.
        find()
        .populate('userId', 'username')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...