我是 Nodejs 新手,从 udemy 类(class) https://www.udemy.com/api-development/learn/v4/content
学习 api 开发类(class)使用 mongodb(mongoose) 但我现在试图用 mongoose
替换 Sequelize
我试着详细解释这个问题。
我有一个文件 db.js
import mongoose from 'mongoose';
import config from './config';
export default callback => {
let db = mongoose.connect(config.mongoUrl);
callback(db);
}
我用 Sequelize 代替了它
import Sequelize from 'Sequelize';
import config from './config';
export default callback => {
let db = new Sequelize(config.dbname, config.dbuser, config.dbpassword, {
host: config.dbhost,
dialect: 'mariadb',
pool: {
max: 5,
min: 0,
idle: 10000
}
});
callback(db);
}
它接受这个 db 实例并将它传递给 routes.js 文件中的中间件和 Controller
import express from 'express';
import config from '../config';
import middleware from '../middleware';
import initializeDb from '../db';
import restaurant from '../controller/restaurant';
let router = express();
//connect to db
initializeDb(db => {
//internal middleware
router.use(middleware({config,db}));
// api routes
router.use('/restaurant',restaurant({config,db}));
});
export default router;
并在创建服务器时将此路由传递给 app.use
import http from 'http';
import express from 'express';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import config from './config';
import routes from './routes'; //her it imports the routes and pass it to app.use below
let app = express();
app.server = http.createServer(app);
// middleware
// parse application/json
app.use(bodyParser.json({
limit:config.bodyLimit
}));
// passport config
//api routes v1
app.use('/v1',routes); //here it pass the routes
var listener = app.server.listen(config.port,function(){
console.log(`Started on port ${listener.address().port}`);
});
export default app;
所以此时 db 实例现在可以在我的 Controller 上使用,方法如下:
这是 Controller 之一
import mongoose from 'mongoose';
import { Router } from 'express';
import Restaurant from '../model/restaurant';
export default({config,db}) => {
let api = Router();
// '/v1/restaurant' - Read
api.get('/',(req,res) => {
// i have db available here
});
return api;
}
此时我需要模型中的 db 实例,所以我可以将它导入 Controller (将模型返回到 Controller ),而不是在 Controller
import Restaurant from '../model/restaurant';
中使用 db 实例,其中 Restaurant
将是 Sequelize 模型但由于我在模型中没有可用的 db,一种方法是在模型文件中初始化 db,但我想如果有办法获取已初始化的 db 实例会更好,在
mongoose
中它使用模式生成模型,但对于 Sequelize 我需要有数据库实例才能创建模型,下面是 Mongoose 模型。import mongoose from 'mongoose';
let Schema = mongoose.Schema;
let restaurantSchema = new Schema({
name:String
});
module.exports = mongoose.model('Restaurant',restaurantSchema);
任何帮助将不胜感激,或者如果有更好的方法,请提出建议
最佳答案
查看最佳实践 here :
查看模型目录,它应该包含所有模型以及 index.js 文件,该文件用于实例化新的 sequelize 实例并将所有模型导入单个对象中。
现在,无论您在哪里需要与数据库交谈,您只需要做的就是:
var models = require('../models');
models.User.create({ ... });
关于node.js - Nodejs express API 一个 sequelize(db) 实例到所有模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43446959/