# node-base **Repository Path**: cpc_public/node-base ## Basic Information - **Project Name**: node-base - **Description**: node 的项目基础 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-03-29 - **Last Updated**: 2022-07-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # nodeBasics > 这是一个 node+express4.x+mongodb 项目 * 环境 1. 环境说明 - 系统:windows10 x64 - node:v8.7.0 - npm:v5.4.2 - mongodb:v4.2.5 - pm2:v4.2.3 - mongoose:v5.9.7 1. 安装node - 官方下载地址:https://nodejs.org/en/download/ 2. 安装mongodb - 查看下载地址:https://blog.csdn.net/muguli2008/article/details/80591256 3. MongoDB可视化图形界面(adminMongo) - adminMongo的GitHub地址为:https://github.com/mrvautin/adminMongo?spm=5176.100239.blogcont65161.29.69ZhEk 1. 使用npm安装admin-mongo应用 ```sudo npm install -g admin-mongo ``` 2. 修改配置文件 - 项目主页中介绍说,默认应用会监听localhost的1234端口,但npm现有版本0.0.23实测外部机器也可以直接访问。 - 如果需要修改运行配置,可以编辑../config/app.json,例如: ```json // locale为语言设置,en为默认使用的英语,此处仅为示意说明 // adminMongo目前还没有中文翻译,热心者可以到项目Github主页贡献翻译 { "app": { "host": "10.0.0.1", "port": 4321, "password": "secureadminpassword", "locale": "en", "context": "dbApp", "monitoring": false } } ``` 3. 进入安装目录 ```sudo npm start ``` 4. pm2加持 5. 环境问题: 参考:https://www.dynatrace.com/news/blog/the-drastic-effects-of-omitting-node-env-in-your-express-js-applications/ 6. 项目运行 ``` bash # 项目构建 npm install # 启动-开发环境 npm run dev # 启动-测试环境 npm run test # 启动-生产环境 npm run start # pm2-启动应用 npm run pm2-start # pm2-重启应用 npm run pm2-restart # pm2-应用列表 npm run pm2-list # pm2-停止应用 npm run pm2-stop # pm2-删除应用 npm run pm2-delete ``` * 基础功能介绍 1. 多环境集成功能 ``` 代码目录:/config/ 主要功能说明: 用于多环境的集成开发,这里暂时分为开发环境,正式环境,测试环境 需要配置:package.json设置 "dev": "set NODE_ENV=development&&node ./bin/www", "start": "set NODE_ENV=production&&node ./bin/www", ``` 2. 日志功能-输出访问日志 ``` 代码目录:/utils/logUtil/log4Util.js 主要功能说明: 开发环境:控制台打印 正式环境:打印到/logs/文件夹的对应日期文件下 分为:网络请求日志,错误日志,自定义日志 使用方式: ```javeScript var log4Util= require('./utils/logUtil/log4Util');//日志打印 app.use(log4Util.netLog); //在错误响应的时候,调用errorLog方法 app.use(function(err, req, res, next) { log4Util.errorLog(err,req,res); }); 自定义日志: log4Util.log("info","内容"); ``` 3. token的认证机制 代码目录:/utils/token/jwtUtil.js 1. 到目录/utils/token/pem/目录下,打开终端,使用openssl命令生成公钥私钥 ```sudo //生成1024位的RSA私钥 openssl genrsa -out private_key.pem 1024 //再由私钥生成公钥 openssl rsa -in private.pem -pubout -out public_key.pem //私钥文件private.pem //公钥文件public.pem //上面私钥是没加密的,可选加密,指定一个加密算法生成时输入密码 //查看密钥 openssl rsa -noout -text -in private.pem //私钥文件中也包含公钥信息 ``` 4. 对外统一状态码 格式如下: ```shell { status:200, msg:"请求成功", data:{} } ``` - 200 : 一切正常 ##### 4XX:客户端错误 - 400("Bad Request") 这是一个通用的客户端错误状态,当其他4XX响应代码不适用时,就采用400。此响应代码通常用于“服务器收到客户端通过PUT或者POST请求提交的表示,表示的格式正确,但服务器不懂它什么意思”的情况。 - 401("Unauthorized") 客户端试图对一个受保护的资源进行操作,却又没有提供正确的认证证书。 - 403("Forbidden") 客户端请求的结构正确,但是服务器不想处理它。 - 404("Not Found") 表明服务器无法把客户端请求的URI转换为一个资源 - 405("Method Not Allowd") 客户端试图使用一个本资源不支持的HTTP方法。例如:一个资源只支持GET方法,但是客户端使用PUT方法访问。 - 407("Proxy Authentication Required") 只有HTTP代理会发送这个响应代码。它跟401类似,唯一区别在于:这里不是无权访问web服务,而是无权访问代理。 - 415("Unsupported Media Type") 当客户端在发送表示时采用了一种服务器无法理解的媒体类型,服务器发送此响应代码 ##### 5XX 服务端错误 - 500("Internal Server Error") 这是一个通用的服务器错误响应。对于大多数web框架,如果在执行请求处理代码时遇到了异常,它们就发送此响应代码。 - 502("Bad Gateway") 只有HTTP代理会发送这个响应代码。它表明代理方面出现问题,或者代理与上行服务器之间出现问题,而不是上行服务器本身有问题。若代理根本无法访问上行服务器,响应代码将是504。 - 503("Service Unavailable") 此响应代码表明HTTP服务器正常,只是下层web服务服务不能正常工作。最可能的原因是资源不足:服务器突然收到太多请求,以至于无法全部处理。由于此问题多半由客户端反复发送请求造成,因此HTTP服务器可以选择拒绝接受客户端请求而不是接受它,并发送503响应代码。 - 504("Gateway Timeout") 跟502类似,只有HTTP代理会发送此响应代码。此响应代码表明代理无法连接上行服务器。 5. 自动化测试 ```shell npm install --save-dev mocha npm install --save-dev chai //chai是一个比node官方Assert库更强大的断言库 npm install -g istanbul //代码覆盖率---没成功 ```