如何在 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

下 运行