Node 中的开发环境与生产环境 和 使用Morgan打印请求信息

一、什么是开发环境与生产环境

环境,就是指项目运行的地方,当项目处于开发阶段,项目运行在开发人员的电脑上,项目所处的环境就是开发环境。当项目开发完成以后,要将项目放到真实的网站服务器电脑中运行,项目所处的环境就是生产环境。

二、为什么要区分开发环境与生产环境

因为在不同的环境中,项目的配置是不一样的,需要在项目代码中判断当前项目运行的环境,根据不同的环境应用不同的项目配置。

三、如何区分开发环境与生产环境

通过电脑操作系统中的系统环境变量区分当前是开发环境还是生产环境。

在这里插入图片描述
在这里插入图片描述

四、Morgan是一个node.js关于http请求的日志中间件

  1. 安装
npm install morgan --save #保存到package.json的依赖列表

在这里插入图片描述

app.js :

// 引用express框架
const express = require('express');
// 处理路径的模块
const path = require('path');
// 引入body-parser模块 用来处理post请求参数
const bodyParser = require('body-parser')
// 引入 express-session模块
const session = require('express-session')
// 引入 art-template模板引擎
const template = require('art-template')
// 引入dateformate第三方模块
const dateFormate = require('dateformat')const morgan = require('morgan')// 创建网站服务器
const app = new express()// 数据库连接
require('./model/connect.js')// 处理post请求参数
app.use(bodyParser.urlencoded({extended: false}))// 配置session
app.use(session({secret: 'zepzep'}))// 开放静态资源文件
var static_path = path.join(__dirname, 'public')
app.use(express.static(static_path))// 获取系统环境变量,返回值是对象
// console.log(process.env.NODE_ENV)
if(process.env.NODE_ENV == "development") {// 当前是开发环境 将客户端发送到服务器端的请求信息打印到控制台中console.log('当前是开发环境')// 在开发环境中app.use(morgan('dev'))
} else {// 当前是生产环境console.log('当前是生产环境')
}// 告诉express框架模板所在的位置
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'html')
// 当渲染后缀为html的模板时,所使用的模板引擎是什么
// 设置模板引擎的后缀名为html
app.engine('html', require('express-art-template'))// 向模板内导入dateFormate变量
template.defaults.imports.dateFormate = dateFormate// 引入路由模块
const home = require('./route/home.js')
const admin = require('./route/admin.js')// 写在路由之前
// 拦截请求 判断用户登录状态
app.use('/admin', require('./middleware/loginGuard.js'))// 为路由匹配请求路径
app.use('/home', home)
app.use('/admin', admin)// 错误处理中间件
app.use((err, req, res, next) => {// JSON.parse() 将字符串对象转换为对象类型const result = JSON.parse(err)let params = []for(let attr in result) {if(attr != 'path') {params.push(attr + '=' + result[attr])}}res.redirect(`${result.path}?${params.join('&')}`)
})// 监听端口
app.listen(3000)
console.log('网站服务器启动成功,请访问http://127.0.0.1:3000/')
  1. 运行结果
    每次http请求,express实例都会输出日志,并且使用一致的格式
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/470661.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】java单例模式的实现

感觉总结得很好,分享一下,原文:http://blog.csdn.net/shiqining888/article/details/51405932 转载于:https://www.cnblogs.com/just84/p/5499228.html

Chapter4-1_Speech_Synthesis(Tacotron)

文章目录1 TTS before End-to-end2 Tacotron2.1 Encoder2.2 Attention2.3 Decoder2.4 Post processing3 How good is Tacotron?本文为李弘毅老师【Speech Synthesis - Tacotron】的课程笔记,课程视频youtube地址,点这里👈(需翻墙)。 下文中…

python基础编码规范_Python语言的基本语法和编码规范.doc

Python 语言的基本语法和编码规范 Python 编程教程教师 : 工作 :Python 语言的基本语法和编码标 准课程描述本章将介绍 Python 语言的基本语法和编码标准,重点介 绍 Python 语言的基本知识,如数据类型、运算符、常量、变量、表 达式和常用语句&#xff0…

第三方模块config的使用

作用:允许开发人员将不同运行环境下的应用配置信息抽离到单独的文件中,模块内部自动判断当前应用的运行环境, 并读取对应的配置信息,极大提供应用配置信息的维护成本,避免了当运行环境重复的多次切换时,手动…

ACM/ICPC 之 Floyd练习六道(ZOJ2027-POJ2253-POJ2472-POJ1125-POJ1603-POJ2607)

以Floyd解法为主的练习题六道 ZOJ2027-Travelling Fee //可免去一条线路中直接连接两城市的最大旅行费用&#xff0c;求最小总旅行费用 //Time:0Ms Memory:604K #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> using nam…

Chapter4-2_Speech_Synthesis(More than Tacotron)

文章目录1 Mispronunciation2 More information for Encoder3 Attention4 Fast Speech and DurIAN5 Dual Learning5 Controllable TTSSpeaker EmbeddingGST-TacotronTwo-stage Training本文为李弘毅老师【Speech Synthesis - More than Tacotron】的课程笔记&#xff0c;课程视…

art-template模板引擎详解

1. 模板引擎 art-template中文文档&#xff1a;https://www.kancloud.cn/lanju/art-template/1500276 1.1 Ajax 项目中存在的问题 数据和HTML字符串拼接导致代码混乱&#xff0c;拼接容易出错&#xff0c;增加修改难度。 业务逻辑和用户界面混合&#xff0c;代码不易维护。 …

python3语法糖_Python笔记3:语法糖

运算 数字运算 运算会根据结果自动判断结果是int还是float 用到除法的时候&#xff0c;结果自动输出为float 双斜杠//得到的结果是int 取模(余数)还是% >>> 22 4 >>> 50-5*6 20 >>> (50-5*6)/4 5.0 >>> 8/5 1.6 >>> 5.0/1.6 3.12…

【代码笔记】iOS-清除图片缓存UIActionSheet

一&#xff0c;效果图。 二&#xff0c;代码。 RootViewController.m //点击任何处出现sheet -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {UIActionSheet * sheet [[UIActionSheet alloc] initWithTitle:"确定要清空图片缓存&#xff1f;" d…

Chapter5_Speaker_Verification

文章目录1 Task Introduction2 模型架构3 模型介绍3.1 i-vector3.2 d-vector3.3 x-vector3.4 more4 End to End本文为李弘毅老师【Speaker Verification】的课程笔记&#xff0c;课程视频youtube地址&#xff0c;点这里&#x1f448;(需翻墙)。 下文中用到的图片均来自于李宏毅…

python如何读取字典的关键字_python提取字典key列表的方法

python提取字典key列表的方法 更新时间&#xff1a;2015年07月11日 12:04:48 作者&#xff1a;企鹅不笨 这篇文章主要介绍了python提取字典key列表的方法,涉及Python中keys方法的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了python提取字典key列表的方法…

使用express搭建服务器获取MySQL数据库数据

一、原始的mysql查询方法 先安装mysql cnpm install mysql --save 引入这个db.js之后&#xff0c;才能对数据库进行查询 进行查询 查询结果如下&#xff1a; 二、ORM 介绍 ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库…

java GZIP压缩和解压

最近碰到了一个按GZIP解压指定的输入流数据&#xff0c;备份下 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.util.zip.GZIPInputStream; import java.util.zip.GZIPOutputStream;/*** 压缩&#xff…

python数据库连接池_Python实现数据库连接池

1.初始化 def __init__(self, **kwargs): self.size kwargs.get(size, 10) self.kwargs kwargs self.conn_queue queue.Queue(maxsizeself.size) for i in range(self.size): self.conn_queue.put(self._create_new_conn()) size&#xff1a;连接池支持的连接数&#xff0c;…

Chapter6_Vocoder

文章目录1 Introduction2 WaveNet2.1 WaveNet的架构2.2 Softmax Distribution2.3 Causal Convolution和Dilated Convolution2.4 Gated Activation Unit2.5 小结3 FFTNet4 WaveRNN4.1 Dual Softmax Layer4.2 Model Coarse4.3 Model Fine4.4 小结5 WaveGlow本文为李弘毅老师【Voc…

show一下自己的文档编写功底

以我为例&#xff0c;我绝对相信&#xff0c;“才华”和颜值成反比。“才华”二字加了引号了&#xff0c;自知跟优秀有孙大圣一个筋斗云的距离&#xff0c;不过某些细节方面表现得被认为还不错&#xff0c;这里我要秀一下我的文档编写能力。在我这十年的工作生涯里&#xff0c;…

mysql命令速查手册

数据准备 -- 创建数据库 create database qianduan_test charsetutf8;-- 使用数据库 use qianduan_test;-- students表 create table students(id int unsigned primary key auto_increment not null,name varchar(20) default ,age tinyint unsigned default 0,height decima…

Chapter7-1_Overview of NLP Tasks

文章目录1 Introduction2 Part-of-Speech(POS) Tagging3 Word Segmentation4 Parsing5 Coreference Resolution6 Summarization7 Machine Translation8 Grammar Error Correction9 Sentiment classification10 Stance Detection11 Natural Language Inference(NLI)12 Search En…

python制作文本编辑器_Python小实战:制作文本编辑器

学了半年了&#xff0c;该施展一下了&#x1f37a; 做什么呢&#xff1f;做一个简单的文本编辑器吧 来&#xff0c;开始 知识点&#xff1a; 1&#xff09;做窗体的知识 2&#xff09;文件操作 窗体用的是tkinter简单模块&#xff0c;系统自带模块 有人说了&#xff1a;“哇&am…

OGNL 详解

Struts2 OGNL详解 1.概念&#xff1a; OGNL是Object-Graph Navigation Language的缩写&#xff0c;全称为对象图导航语言&#xff0c;是一种功能强大的表达式语言&#xff0c;它通过简单一致的语法&#xff0c;可以任意存取对象的属性或者调用对象的方法&#xff0c;能够遍历整…