Files
yapi/server/utils/db.js
2024-03-01 20:28:14 +08:00

84 lines
1.9 KiB
JavaScript

const mongoose = require('mongoose');
const yapi = require('../yapi.js');
const autoIncrement = require('./mongoose-auto-increment');
function model(model, schema) {
if (schema instanceof mongoose.Schema === false) {
schema = new mongoose.Schema(schema);
}
schema.set('autoIndex', false);
return mongoose.model(model, schema, model);
}
function connect(callback) {
mongoose.Promise = global.Promise;
mongoose.set('useNewUrlParser', true);
mongoose.set('useFindAndModify', false);
mongoose.set('useCreateIndex', true);
let config = yapi.WEBCONFIG;
let options = {useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true};
if (config.db.user) {
options.user = config.db.user;
options.pass = config.db.pass;
}
if (config.db.reconnectTries) {
options.reconnectTries = config.db.reconnectTries;
}
if (config.db.reconnectInterval) {
options.reconnectInterval = config.db.reconnectInterval;
}
options = Object.assign({}, options, config.db.options)
var connectString = '';
if(config.db.connectString){
connectString = config.db.connectString;
}else{
connectString = `mongodb://${config.db.servername}:${config.db.port}/${config.db.DATABASE}`;
if (config.db.authSource) {
connectString = connectString + `?authSource=${config.db.authSource}`;
}
}
let db = mongoose.connect(
connectString,
options,
function(err) {
if (err) {
yapi.commons.log(err + ', mongodb Authentication failed', 'error');
}
}
);
db.then(
function() {
yapi.commons.log('mongodb load success...');
if (typeof callback === 'function') {
callback.call(db);
}
},
function(err) {
yapi.commons.log(err + 'mongodb connect error', 'error');
}
);
autoIncrement.initialize(db);
return db;
}
yapi.db = model;
module.exports = {
model: model,
connect: connect
};