Nodejs快速搭建项目_区分生产和测试环境

2022-09-29 13:25:50

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

实现:
那么我就来快速搭建并且测试一下,步骤如下。
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 & npmstart

结果如下:
在这里插入图片描述
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=productionset PORT=8083npm start

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

set NODE_ENV=developmentnpm start

那么结果图如下:
在这里插入图片描述

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

  • 作者:zhoudado921
  • 原文链接:https://blog.csdn.net/zhoudado921/article/details/105833191
    更新时间:2022-09-29 13:25:50