# express-serve-pro **Repository Path**: topazur/express-serve-pro ## Basic Information - **Project Name**: express-serve-pro - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-02-21 - **Last Updated**: 2021-03-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # [安装](https://www.expressjs.com.cn/starter/generator.html) ```bash $ npx express-generator --view ejs --css less --git # 在 Node.js 8.2.0 及更高版本中使用npx run the app: ??? > SET DEBUG=express-server:* & npm start ``` ## 参考资料 - [Nodejs全栈入门-慕课网视频教程](https://www.imooc.com/learn/1199) - [Sequelize ORM](https://sequelize.org/) - [PM2 Qucik Start](https://pm2.keymetrics.io/docs/usage/quick-start/) - [postman](https://www.postman.com/) - [REST Client 测试(vscode插件)](https://www.jianshu.com/p/be63bb085844) - [VSCode插件推荐 | REST Client: 也许是比Postman更好的选择 ](https://www.sohu.com/a/295730790_791833) - [postman汉化](https://gitee.com/hlmd/PostmanCn#https://gitee.com/hlmd/PostmanCn/releases) - [Vue.js 3.0使用cleave.js](https://www.linchaoqun.com/html/cms/content.jsp?menu=vuejs3.0&id=746181b5-b73a-4ec0-a09e-ae9952106247) - [jsPDF](https://www.cnblogs.com/xuezizhenchengxuyuan/p/6023409.html) - [mysql8 安装](https://blog.csdn.net/qq_37350706/article/details/81707862) - [Retrofit响应数据规则](https://lionoggo.blog.csdn.net/article/details/52689010) - [git commit 规则](https://zhuanlan.zhihu.com/p/90281637)
# MySQL & MongoDB 安装与卸载 /** * mongod --dbpath=/usr/local/mongodb/data/db --logpath=/usr/local/mongodb/logs/mongo.log --port=27017 --bind_ip=0.0.0.0 --logappend --fork --auth * 把 “bind_ip: 127.0.0.1”默认只允许本地连接(或者构建SSH通道,然后通过localhost连接);改为“bind_ip: 0.0.0.0”允许所有, 使其能通过外链连接。 * * 开机自动启动mongodb,编辑/etc/rc.d/rc.local,在文件后面加上如下这行 * /usr/local/mongodb/bin/mongod --config /usr/local/mongodb/bin/mongodb.conf * * http://www.360doc6.net/wxarticlenew/680678706.html * * https://www.cnblogs.com/blogchen/articles/9074594.html * find / -name mysql rpm -qa | grep mysql * `arch`命令:aarch64 就是 ARM 架构,x86_64 就是 X86 架构;MIPS 架构不知道输出什么,没见过,估计也是直接输出 mips,我们可以用排除法,如果不是前两种就是 MIPS 架构。 * 安装:https://blog.csdn.net/forebe/article/details/110041126 * mysql8修改密码[1396 (HY000)]:https://blog.csdn.net/q258523454/article/details/84555847 * [1290 (HY000)]:https://www.cnblogs.com/iosdev/archive/2013/07/15/3190431.html * 修改三种方式:https://www.cnblogs.com/chuckjam/archive/2018/08/10/9456255.html * 密码策略:https://www.cnblogs.com/Owen-ET/p/9644727.html * (更改密码后):https://www.jb51.net/article/159115.htm * */
# [性能-performance](https://www.expressjs.com.cn/zh-cn/advanced/best-practice-performance.html) 1. 使用 gzip 压缩 对于生产环境中的大流量网站,实施压缩的最佳位置是在反向代理层级(请参阅使用反向代理)。在此情况下,不需要使用压缩中间件[compression](https://www.npmjs.com/package/compression)。有关在 Nginx 中启用 gzip 压缩的详细信息,请参阅 Nginx 文档中的 [ngx_http_gzip_module 模块](http://nginx.org/en/docs/http/ngx_http_gzip_module.html)。 2. 不使用同步函数 - 同步函数和方法会阻止执行进程的运行,直至其返回。对同步函数的每次调用可能在数微秒或数毫秒后返回,但是在大流量网站中,这些调用的累积返回时间也相当可观,会影响到应用程序的性能。因此应避免在生产环境中使用同步函数。
- 虽然 Node 和许多模块提供函数的同步和异步版本,但是在生产环境中请始终使用异步版本。只有在初始启动时才适合使用同步函数。
- 使用 `--trace-sync-io` 命令行标记,每当应用程序使用同步 API 时就显示一条警告消息和堆栈跟踪。 3. 正确进行日志记录 - 出于调试目的 - [debug](https://www.npmjs.com/package/debug) 这样的特殊调试模块 - 出于应用程序活动目的(除调试以外的其他所有事项)
如果要对应用程序活动进行日志记录(例如,跟踪流量或 API 调用),请使用 [Winston](https://www.npmjs.com/package/winston) 或 [Bunyan](https://www.npmjs.com/package/bunyan) 之类的日志记录库,而不要使用 console.log()。要了解这两个库的详细对比,请参阅 StrongLoop 博客帖子 [Comparing Winston and Bunyan Node.js Logging](https://strongloop.com/strongblog/compare-node-js-logging-winston-bunyan/)。 4. 正确处理异常 - 回调函数必须相应地遵循“error-first”回调约定 - Promise 可以处理使用 then() 的异步代码块中的任何异常(显式和隐式)。只需将 .catch(next) 添加到 Promise 链的末尾。 ```js app.get('/', function (req, res, next) { // do some sync stuff queryDb() .then(function (data) { // handle data return makeCsv(data) }) .then(function (csv) { // handle csv }) .catch(next);// 所有异步和同步错误都会传播到错误中间件。!!! }); ``` 5. 环境/设置中的注意事项 - 将 NODE_ENV 设置为“production” [nodejs 设置 NODE_ENV 环境变量](https://www.cnblogs.com/fhen/p/6293763.html)
# 文件上传 * [`await util.promisify(fs.stat)('text1.txt')` & `fs.constants.F_OK`](https://blog.csdn.net/xgangzai/article/details/112914531) * [`fs.accessSync(path[, mode])`](http://nodejs.cn/api/fs/fs_accesssync_path_mode.html) * [文件可访问性的常量: `fs_file_access_constants`](http://nodejs.cn/api/fs.html#fs_file_access_constants) * [nodejs之multiparty插件使用简析](https://blog.csdn.net/weixin_30338481/article/details/95833931) * [大文件上传前台分片后 后台合并的问题](https://www.cnblogs.com/goloving/p/12825973.html)
# [MySQL的排序规则](https://www.cnblogs.com/unclewang666/p/10540634.html) 一、对比   1、utf8_general_ci 不区分大小写, utf8_general_cs 区分大小写   2、utf8_bin: compare strings by the binary value of each character in the string 将字符串每个字符串用二进制数据编译存储,区分大小写,而且可以存二进制的内容。   3、utf8_unicode_ci校对规则仅部分支持Unicode校对规则算法,一些字符还是不能支持;utf8_unicode_ci不能完全支持组合的记号。   说明:ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的。bin 是二进制, a 和 A 会别区别对待。例如你运行:SELECT * FROM table WHERE txt = 'a',那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 则可以。utf8_general_ci是一个遗留的 校对规则,不支持扩展,它仅能够在字符之间进行逐个比较。这意味着utf8_general_ci校对规则进行的比较速度很快,但是与使用 utf8_unicode_ci的校对规则相比,比较正确性较差。 二、应用上的差别   1、对于一种语言仅当使用utf8_unicode_ci排序做的不好时,才执行与具体语言相关的utf8字符集校对规则。例如,对于德语和法语,utf8_unicode_ci工作的很好,因此不再需要为这两种语言创建特殊的utf8校对规则。   2、utf8_general_ci也适用与德语和法语,除了‘?’等于‘s’,而不是‘ss’之外。如果你的应用能够接受这些,那么应该使用 utf8_general_ci,因为它速度快。否则,使用utf8_unicode_ci,因为它比较准确。 三、使用   utf8_unicode_ci比较准确,utf8_general_ci速度比较快。通常情况下,新建数据库时一般选用utf8_general_ci就可以了。
# sequelize ( &cli ) -- ORM > web->webserver->router->handler->orm->db ## 初始化mysql数据库 安装并配置好mysql数据库`todo_development`,并且安装好`sequelize`依赖后, 在项目`todo_api/db`目录下执行如下操作 ``` npx sequelize db:migrate ``` 完成`todo_development`数据库的初始化,这条命令会将`todo_api/db/migrations`目录下的`20200823035851-create-todo.js`中的模型Todos导入到`todo_development`数据库中, 其中定义了Todos模型,使用这条命令后会在数据库中新增一张Todos表。 ## 数据库的初始化 1. 创建一个数据库 2. 使用 `sequelize cli` 初始化项目的数据库配置信息 ` npx sequelize init ` 3. 生成模型文件 - A. migrate 文件 - B. model 文件 ` npx sequelize model:generate --name Todo --attributes name:string,deadline:date,content:string ` 4. 持久化, 模型对应的[数据库表] ` npx sequelize db:migrate ` ## 接口调试 ### 1. [postman](https://www.postman.com/) ### 2. VSCode plugin: `Rest Client` 在VSCode中安装好RestClient插件后,在根目录下编写一个` api.http `的文件,并写入如下代码: ``` http语言规则:见`test`目录下 ```
## 测试断言库 [should、chai](for test) # 项目的发布和运维 > pm2 **启动命令/运维命令/运维命令/运维文档:** 1. pm2 start ecosystem.config.js 2. pm2 logs 3. pm2 restart ecosystem.config.js # bug 1. Port xxxx is already in use ```bash # 查找正在運行的端口的PID $ netstat -a -n -o # 根据pid删除进程 $ taskkill -f /pid 17200 或者 $ npm install killport2 -g $ killport 3000 ``` 2. 安装bcrypt报错 - https://www.cnblogs.com/wangyuxue/p/11218113.html - https://blog.csdn.net/qfxlw/article/details/85331869 - https://www.jb51.cc/centos/373456.html ```bash # 通过管理员模式执行以下代码: 安装Python环境 $ npm install --global --production windows-build-tools $ npm install -g node-gyp # 调用一些其他语言编写的工具 # 上面步骤如果没有安装好python2.7,则安装下 $ npm install --python=python2.7 $ npm config set python python2.7 npm config get python ```