问题:测试环境和生产环境不是同样的数据库或者配置不一样,那么上线的时候总不能改代码吧?那么如果实现一键部署呢?

实现: 那么我就来快速搭建并且测试一下,步骤如下。 1、你已经成功安装了node。 2、快速搭建一个项目:使用express的应用程序生成器npx express-generator。具体实现如下:https://www.expressjs.com.cn/en/starter/generator.html 按照上个链接创建项目,使用npm start命令正常启动,通过浏览器访问http://localhost:3000/就可以检测是否成功启动。 看代码: 其实我们可以看到这个demo已经区分了生产或者测试的启动端口设置了,见bin/www的文件,部分代码如下:

var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
 * Create HTTP server.
 */
var server = http.createServer(app);

扩展:如果我在不改代码的情况下,想使用8083端口启动,怎么办?

set PORT=8083 & npm start

结果如下:

nodejs express项目结构_配置文件

3、代码中区分环境。

第2步的例子只是可以区分端口,但是如果想区分数据库或者redis的连接,上面的步骤是远远不够的。那么如果能实现零配置进行启动呢?

最简单的想法:弄一个配置文件,在发布之前修改配置文件是测试还是生产。但是注意,只要是需要人工干预的,都是有可能出现问题的,那就是会忘记…

我们可以使用以下办法,让其动态实现:

1、在根目录创建config目录,以下(1)(2)(3)步都是存在于config目录下

(1)创建测试或者开发环境的development.js类

module.exports={
    sql:{
        sqlServer: 'TestServer',
        sqlDatabase:'TestDatabase',
        salUser:'testUser',
        sqlPwd:'testPwd'
    }
}

(2)创建生产环境的production.js类

module.exports={
    sql:{
        sqlServer: 'ProdServer',
        sqlDatabase:'ProdDatabase',
        salUser:'ProdUser',
        sqlPwd:'ProdPwd'
    }
}

(3)创建动态读取的类choise.js

var path=require('path')

//通过NODE_ENV来设置环境变量,如果木有指定则默认为生产环境
var env=process.env.NODE_ENV || 'production';
env=env.toLowerCase();
//载入配置文件
var file=path.resolve(__dirname,env);
try {
    module.exports=require(file)
} catch (error) {
    throw error;
}

(4)引入环境代码 在route/index.js文件中,新增choise.js的引入,并且打印和返回最终获取的环境信息,最终代码如下:

var express = require('express');
var router = express.Router();
var choise=require('../config/choise.js')

/* GET home page. */
router.get('/', function(req, res, next) {
  console.log(choise.sql)
  res.render('index', { title: choise.sql.sqlServer });
});
module.exports = router;

(5)进行测试,创建production.bat文件,此bat文件是window环境的,直接在文件夹目录找到此文件,双击即可启动

set NODE_ENV=production
set PORT=8083
npm start

(6)查看结果,结果图如下

nodejs express项目结构_生产环境_02

(7)以上就是结果,如果你要创建开发或者测试环境的,按照第(5)步一样的形式就行了,比如我创建了development.bat,代码如下:—没有设置端口,但是因为www文件中,如果没有设置默认是3000

set NODE_ENV=development
npm start

那么结果图如下:

nodejs express项目结构_nodejs_03

以上就是搭建并测试了一个区分环境的步骤,如有疑问可留言哦~~~