如何在 node.js 中添加生产、开发和测试环境
How can I add production, development and test environment in node.js
我想在我的 node.js 项目中添加生产、开发和测试环境 我无法理解从哪里开始下面是我的代码 我看过很多示例但我无法理解
如何根据环境更新。我已将数据库凭据存储在 .env
文件
中
db.config.js
require('dotenv').config()
var config = {
HOST: process.env.DB_HOST || "127.0.0.1",
USER: process.env.DB_USER,
PASSWORD: process.env.DB_PASSWORD,
DB: process.env.DB_NAME,
DIALECT: process.env.DB_DIALECT || "postgres"
};
module.exports = config;
models/index.js
const dbConfig = require("../config/db.config");
const Sequelize = require("sequelize");
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
host: dbConfig.HOST,
dialect: dbConfig.DIALECT,
operatorsAliases: false,
});
const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;
db.user = require("./user")(sequelize, Sequelize);
db.role = require("./role")(sequelize, Sequelize);
db.items = require("./items")(sequelize, Sequelize);
db.role.belongsToMany(db.user, {
through: "user_roles",
foreignKey: "roleId",
otherKey: "userId"
});
db.user.belongsToMany(db.role, {
through: "user_roles",
foreignKey: "userId",
otherKey: "roleId"
});
db.ROLES = ["user", "admin"];
module.exports = db;
app.js
var express = require('express');
var bodyParser = require('body-parser');
var db = require('./models');
const logger = require('morgan');
const cors = require("cors");
var app = express();
db.sequelize.sync({ force: false }).then(() => {
console.log("Drop and re-sync db.");
});
app.use(cors());
app.use(logger('dev'))
app.use(bodyParser.json({
type: 'application/vnd.api+json'
})); // parse application/vnd.api+json as json
app.use(bodyParser.json({
limit: '50mb'
}));
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: true,
parameterLimit: 50000
}));
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Credentials", true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
res.header("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0");
next();
});
app.get('/', function (req, res) {
res.send('Welcome to Passport with Sequelize');
});
require("./routes/auth.routes.js")(app);
require("./routes/user.routes.js")(app);
require("./routes/items.routes.js")(app);
const PORT = process.env.PORT || 8000;
const server = app.listen(PORT, function(){
console.log("Listening on port: 8080");
});
// app.listen(PORT, () => console.log(`Listening on port: ${PORT}`))
module.exports = server;
在 app.js 所在的同一文件夹中添加另一个名为 config.js 的文件,并在 config.js.
中写入以下代码
var environments = {};
environments.test = {
'port':3000,
'envName': 'test'
};
environments.development = {
'port':5000,
'envName': 'development'
};
environments.production = {
'port':8000,
'envName': 'production'
}
var currentEnvironment = typeof(process.env.NODE_ENV) == 'string' ? process.env.NODE_ENV : '';
var environmentToExport = typeof(environments[currentEnvironment]) == 'object' ? environments[currentEnvironment] : environments.test;
module.exports = environmentToExport;
根据上述文件,每次启动服务器时,如果您提到环境(测试、开发或生产),那么它将检查该环境的端口号和该端口上的 运行 服务器.例如,localhost:3000
用于测试,localhost:5000
用于开发或 localhost:8000
用于生产。
现在在你的 app.js 文件中修改几行。
var express = require('express');
var bodyParser = require('body-parser');
var db = require('./models');
const logger = require('morgan');
const cors = require("cors");
const config = require('./config');
var app = express();
db.sequelize.sync({ force: false }).then(() => {
console.log("Drop and re-sync db.");
});
app.use(cors());
app.use(logger('dev'))
app.use(bodyParser.json({
type: 'application/vnd.api+json'
})); // parse application/vnd.api+json as json
app.use(bodyParser.json({
limit: '50mb'
}));
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: true,
parameterLimit: 50000
}));
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Credentials", true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
res.header("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0");
next();
});
app.get('/', function (req, res) {
res.send('Welcome to Passport with Sequelize');
});
require("./routes/auth.routes.js")(app);
require("./routes/user.routes.js")(app);
require("./routes/items.routes.js")(app);
const PORT = config.port;
const server = app.listen(PORT, function(){
console.log("Listening on port: "+PORT + ' in ' + config.envName + ' environment.');
});
// app.listen(PORT, () => console.log(`Listening on port: ${PORT}`))
module.exports = server;
现在,您可以运行在不同的环境中应用。
命令将是 NODE_ENV=test node app.js
进行测试,
NODE_ENV=development node app.js
用于开发和
NODE_ENV=production node app.js
用于生产。
如果未提及 NODE_ENV
,则应用程序将在默认环境 test
下 运行
我想在我的 node.js 项目中添加生产、开发和测试环境 我无法理解从哪里开始下面是我的代码 我看过很多示例但我无法理解
如何根据环境更新。我已将数据库凭据存储在 .env
文件
db.config.js
require('dotenv').config()
var config = {
HOST: process.env.DB_HOST || "127.0.0.1",
USER: process.env.DB_USER,
PASSWORD: process.env.DB_PASSWORD,
DB: process.env.DB_NAME,
DIALECT: process.env.DB_DIALECT || "postgres"
};
module.exports = config;
models/index.js
const dbConfig = require("../config/db.config");
const Sequelize = require("sequelize");
const sequelize = new Sequelize(dbConfig.DB, dbConfig.USER, dbConfig.PASSWORD, {
host: dbConfig.HOST,
dialect: dbConfig.DIALECT,
operatorsAliases: false,
});
const db = {};
db.Sequelize = Sequelize;
db.sequelize = sequelize;
db.user = require("./user")(sequelize, Sequelize);
db.role = require("./role")(sequelize, Sequelize);
db.items = require("./items")(sequelize, Sequelize);
db.role.belongsToMany(db.user, {
through: "user_roles",
foreignKey: "roleId",
otherKey: "userId"
});
db.user.belongsToMany(db.role, {
through: "user_roles",
foreignKey: "userId",
otherKey: "roleId"
});
db.ROLES = ["user", "admin"];
module.exports = db;
app.js
var express = require('express');
var bodyParser = require('body-parser');
var db = require('./models');
const logger = require('morgan');
const cors = require("cors");
var app = express();
db.sequelize.sync({ force: false }).then(() => {
console.log("Drop and re-sync db.");
});
app.use(cors());
app.use(logger('dev'))
app.use(bodyParser.json({
type: 'application/vnd.api+json'
})); // parse application/vnd.api+json as json
app.use(bodyParser.json({
limit: '50mb'
}));
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: true,
parameterLimit: 50000
}));
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Credentials", true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
res.header("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0");
next();
});
app.get('/', function (req, res) {
res.send('Welcome to Passport with Sequelize');
});
require("./routes/auth.routes.js")(app);
require("./routes/user.routes.js")(app);
require("./routes/items.routes.js")(app);
const PORT = process.env.PORT || 8000;
const server = app.listen(PORT, function(){
console.log("Listening on port: 8080");
});
// app.listen(PORT, () => console.log(`Listening on port: ${PORT}`))
module.exports = server;
在 app.js 所在的同一文件夹中添加另一个名为 config.js 的文件,并在 config.js.
中写入以下代码var environments = {};
environments.test = {
'port':3000,
'envName': 'test'
};
environments.development = {
'port':5000,
'envName': 'development'
};
environments.production = {
'port':8000,
'envName': 'production'
}
var currentEnvironment = typeof(process.env.NODE_ENV) == 'string' ? process.env.NODE_ENV : '';
var environmentToExport = typeof(environments[currentEnvironment]) == 'object' ? environments[currentEnvironment] : environments.test;
module.exports = environmentToExport;
根据上述文件,每次启动服务器时,如果您提到环境(测试、开发或生产),那么它将检查该环境的端口号和该端口上的 运行 服务器.例如,localhost:3000
用于测试,localhost:5000
用于开发或 localhost:8000
用于生产。
现在在你的 app.js 文件中修改几行。
var express = require('express');
var bodyParser = require('body-parser');
var db = require('./models');
const logger = require('morgan');
const cors = require("cors");
const config = require('./config');
var app = express();
db.sequelize.sync({ force: false }).then(() => {
console.log("Drop and re-sync db.");
});
app.use(cors());
app.use(logger('dev'))
app.use(bodyParser.json({
type: 'application/vnd.api+json'
})); // parse application/vnd.api+json as json
app.use(bodyParser.json({
limit: '50mb'
}));
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: true,
parameterLimit: 50000
}));
app.use(function (req, res, next) {
res.header("Access-Control-Allow-Origin", '*');
res.header("Access-Control-Allow-Credentials", true);
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header("Access-Control-Allow-Headers", 'Origin,X-Requested-With,Content-Type,Accept,content-type,application/json');
res.header("Cache-Control", "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0");
next();
});
app.get('/', function (req, res) {
res.send('Welcome to Passport with Sequelize');
});
require("./routes/auth.routes.js")(app);
require("./routes/user.routes.js")(app);
require("./routes/items.routes.js")(app);
const PORT = config.port;
const server = app.listen(PORT, function(){
console.log("Listening on port: "+PORT + ' in ' + config.envName + ' environment.');
});
// app.listen(PORT, () => console.log(`Listening on port: ${PORT}`))
module.exports = server;
现在,您可以运行在不同的环境中应用。
命令将是 NODE_ENV=test node app.js
进行测试,
NODE_ENV=development node app.js
用于开发和
NODE_ENV=production node app.js
用于生产。
如果未提及 NODE_ENV
,则应用程序将在默认环境 test