使用 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);
});
我是 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);
});