使用 Azure SQL 数据库 (express/node) 配置 Sequelize

Configuring Sequelize with Azure SQL DB (express/node)

我是 nodejs 的新手,对 Sequelize 更是如此。我正在尝试使用 Sequelize 将 API 设置为 MSSQL,但我无法理解一些基础知识。我似乎无法与我的 SQL 数据库进行交互。

这是我的 server.js 文件

var express = require('express');
var bodyParser = require('body-parser');
var app = express();

var models = require('./models');

var port = process.env.PORT || 3011;

app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json());

var transactionRouter = require('./server/Routes/transactionRoutes')();
var userRouter = require('./server/Routes/userRoutes')();
var authRouter = require('./server/Routes/authRoutes')();

app.use(function (req, res, next) {
    // Website you wish to allow to connect
    res.setHeader('Access-Control-Allow-Origin', 'http://localhost:8012');
    // Request methods you wish to allow
    res.setHeader('Access-Control-Allow-Methods', 'GET');
    // Request headers you wish to allow
    res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
    // Set to true if you need the website to include cookies in the requests sent
    // to the API (e.g. in case you use sessions)
    res.setHeader('Access-Control-Allow-Credentials', false);
    // Pass to next layer of middleware
    next();
});

app.use('/api/transactions', transactionRouter);
app.use('/api/auth', authRouter);
app.use('/api/users', userRouter);

app.get('/', function(req, res) {
    res.send('welcome to my API');
});

app.listen(port, function() {
    console.log('Gulp is running my app on PORT: ' + port);
});

module.exports = app;

Models/Index.js

var fs = require("fs");
var path = require("path");
var Sequelize = require("sequelize");
var env = process.env.NODE_ENV || "development";
var sequelize = new Sequelize('dbname', 'dbusername', 'dbpassword', {
    host: 'dbhostname',
    dialect: 'mssql',
    pool: {
        max: 5,
        min: 0,
        idle: 10000
    }
});

var db = {};

fs
    .readdirSync(__dirname)
    .filter(function(file) {
        return (file.indexOf(".") !== 0) && (file !== "index.js");
    })
    .forEach(function(file) {
        var model = sequelize["import"](path.join(__dirname, file));
        db[model.name] = model;
    });

Object.keys(db).forEach(function(modelName) {
    if ("associate" in db[modelName]) {
        db[modelName].associate(db);
    }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;

module.exports = db;

一个模型Models/user.js

module.exports = function(sequelize, DataTypes) {
  var User = sequelize.define('BO_Users', {
    username        : DataTypes.STRING,
    password     : DataTypes.STRING,
  });

  return User;
};

A 路由 server/Routes/userRoutes.js

var express = require('express');
var models  = require('../../models');


var routes = function() {
    var userRouter = express.Router();

    userRouter.route('/')
        .get(function(req, res) {
            console.log("Made it to the new route");
            console.log("made it to the new get route");
            models.User.findAll({})
            .then(function() {
                console.log('Got some users');
            });
        })
        .post(function(req, res) {
            console.log("Made it to the post route");
        });

    return userRouter;
};

module.exports = routes;

我很确定我需要在某个地方做一个 models.sequelize.sync(),但我有点迷路了,找不到适合我的好教程。我已经准备好了桌子,我只想开始与他们互动。谢谢!!

作为快速修复,我建议将 .sync() 放在 server.js 之前并包装侦听器,以便在数据库准备好之前无法与应用程序交互。

例如:

models.sequelize.sync().then(function() {
    console.log('starting listener on PORT: '+port);
    app.listen(port, function(err) {
        if(err) return console.error('Failed to start listener: '+err);
        console.log('Gulp is running my app on PORT: ' + port);
    });
}).catch(function(err) {
   console.error('failed to sync DB: '+err);
});