Приложение разработано с использованием 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('/');
}
});