【问题标题】:How can I add production, development and test environment in node.js如何在 node.js 中添加生产、开发和测试环境
【发布时间】:2020-10-06 12:16:42
【问题描述】:

我想在我的 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;

【问题讨论】:

    标签: javascript node.js postgresql express sequelize.js


    【解决方案1】:

    在 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 上运行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-23
      • 2010-09-29
      相关资源
      最近更新 更多