簡體   English   中英

如何在 node.js 中添加生產、開發和測試環境

[英]How can I add production, development and test environment in node.js

我想在我的 node.js 項目中添加生產、開發和測試環境我無法理解從下面開始是我的代碼我看過很多示例但我無法理解如何根據環境進行更新。 我已將數據庫憑據存儲在.env文件中

數據庫配置文件

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;

模型/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;

應用程序.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運行

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM