Node 最佳实践
正在加载今日诗词....2022-04-29
全文地址:https://github.com/goldbergyoni/nodebestpractices/blob/master/README.chinese.md
项目结构最佳实践
拆分模块
拆分原则:
- 业务拆分
- 技术拆分
分层设计
将业务分层处理,以 GitFlow 为例:
- Publish
- Git
- GitServer
- CloudBuild
封装公共模块成为NPM的包
- 参考 Lerna 源码设计
- 通过 file 或 npm link 关联本地模块
- 控制拆分力度,设计拆分原则
配置文件
异常处理最佳实践
使用 async await 或 promise,避免使用回调
推荐:
doWork()
.then(doWork)
.then(doOtherWork)
.then((result) => doWork)
.catch((error) => {throw error;})
.then(verify);
或者
(async function() {
try {
await doWork();
const result = await doOtherWork();
await doWork(result);
} catch(e) {
throw e;
} finally {
verify();
}
})();
不推荐:
getData(someParameter, function(err, result){
if(err != null)
//做一些事情类似于调用给定的回调函数并传递错误
getMoreData(a, function(err, result){
if(err != null)
//做一些事情类似于调用给定的回调函数并传递错误
getMoreData(b, function(c){
getMoreData(d, function(e){
if(err != null)
//你有什么想法?
});
});
编码风格实践
- 使用ESLint
- Node.js特定的插件
- 在同一行开始一个代码块的大括号
- 不要忘记分号
- 命名您的方法
- 变量、常量、函数和类的命名约定
- 使用const优于let,废弃var
- 先require, 而不是在方法内部
- require 文件夹,而不是文件
- 使用 === 操作符
- 使用 Async Await, 避免回调
- 使用 (=>) 箭头函数
测试和总体的质量实践
- 至少,编写API(组件)测试
- 使用一个linter检测代码问题
- 经常检查易受攻击的依赖
- 检查过期的依赖包
上线实践
- 监控!
- 使用智能日志增加透明度
- 委托可能的一切(例如:gzip,SSL)给反向代理
- 锁住依赖
- 利用CPU多核
- Node外管理您的前端资源
- 设置NODE_ENV=production
安全最佳实践
- 拥护linter安全准则
- 使用中间件限制并发请求
- 把机密信息从配置文件中抽离出来,或者使用包对其加密
- 通用安全最佳实践集合
- 调整 HTTP 响应头以加强安全性
- 经常自动检查易受攻击的依赖库
- 避免使用Node.js的crypto库处理密码,使用Bcrypt
- 转义 HTML、JS 和 CSS 输出
- 验证传入的JSON schemas
- 使用非root用户运行Node.js
- 避免JavaScript的eval声明
- 在沙箱中运行不安全代码
- 使用子进程时要格外小心
- 避免不安全的重定向
- 避免将机密信息发布到NPM仓库
Copyright © 2022 @filway