2016-11-14 3 views
1

Ich versuche Sequelize auf modulare Weise zu konfigurieren, aber ich habe Probleme, wenn meine Modelle erfordern.Problem, Fortsetzung Modell mit Express

Ich habe den folgenden Code für die Initialisierung:

// sequelize.js 
module.exports = { 
    init() { 
    if (!db) { 
     db = new Sequelize(database, username, password, { 
     host, 
     dialect 
     }) 
     db 
     .authenticate() 
     .then(() => { 
      logging.info('Connection has been established successfully.') 
     }) 
     .catch((err) => { 
      logging.error(`Unable to connect to the database: ${err}`) 
     }) 
     return Promise.resolve(db) 
    } 
    return Promise.resolve(db) 
    }, 
    define(...args) { 
    if (db) { 
     return db.define(args) 
    } 
    throw new Error('init the db first before defining models') 
    } 
} 

Und das ist mein Modell:

'use strict' 
import Sequelize from 'sequelize' 
import sequelize from '../sequelize' 

const User = sequelize.define('user', { 
    email: Sequelize.STRING 
}) 

export default User 

In meiner ausdrücklichen app ich dies tun:

import { user } from './routes' 

sequelize.init() 
    .then(() => { 
    app.use('/v2', user) 
    ... 
    }) 

Und in der Benutzer Route Ich habe dies:

import express from 'express' 

const router = express.Router() 
import User from '../models/user' 

router.get('/users', (req, res) => { 
    res.json([]) 
}) 

Wenn ich jedoch meine App starte, ist die Router-Middleware die erste, die initialisiert werden kann und keine Datenbankverbindung herstellen kann, da sequelize, init() aufgerufen wird, nachdem app.use Middleware angewendet wird. Offensichtlich habe ich einen Bestellfehler mit, wie ich meine Module benötige. Ich wollte sehen, ob es einen Weg gibt, und ob es eine logische Möglichkeit gibt, meine sequelize db Verbindung als ersten Schritt zu initiieren.

Vielen Dank.

Antwort

0

dieses Fest durch require später wie folgt die Route ing:

app.use('/v2', require('./routes/people'))

Arbeitete perfekt :)