现在,可以在node.js上编写API时获得大量材料。其中大多数采用文档中的教程和演示的形式。这足以快速找出并编写自己的东西。但是他们很少找到为什么这样做的细节。为了简洁起见,一些要点全部省略。本文旨在填补可能出现的空白,并最终改善您在node.js上的服务。PS:无论如何我都不认为自己是专家:有成长的空间。但是同时有一些共享的东西。项目文件结构
文件结构是基本但非常重要的事情。创建它时,值得考虑扩展服务的可能性,因此,不值得将文件放置在一个目录的平面结构中。需要层次结构,需要模块化。命名目录时,必须遵守既定标准。这将帮助同事,并在几个月内快速找到位置和位置。文件结构示例src/
controllers/
users/
index.js
index.js
db/
mongo/
index.js
index.js
helpers/
middlewares/
auth.js
models/
users.js
routes/
users/
index.js
index.js
index.js
.eslintrc
.gitignore
README.md
...
package.json
笔记:- 所有可执行文件都应位于./src中,
这将使您可以将源文件与已编译的打字稿或babel分开,后者将位于./dist或./build中。
由于目标文件位于单独的目录中,因此也将使配置lint和其他可配置工具变得更加容易。
将所有控制器和路由实体放在单独的目录中,这将打开一个./routes或./controller,并且仅看到一个导入和导出子目录实体的index.js文件。
这将允许您快速浏览现有功能,因为它仅描述了控制器或路由器的接口,而无需研究其实现。
关于Javascript编译
当然,您不能使用babel或打字稿来转换您的javascript。通常,新的ECMAScript标准很快就会出现在node.js中,并且您可以(基于浏览器的javascript除外)控制它们的支持。但是我坚信它们值得使用。这就是为什么:- 最新版本的Node.js并不总是可用于生产。
- Node.js(第13版)在支持ECMAScript模块方面仍然存在问题,尽管它们出现并留下了标志,但它们仍处于试验阶段。要早卖。
考虑将babel添加到项目中:安装依赖项:npm install @babel/core @babel/node @babel/preset-env --save-dev
将.babelrc配置文件添加到项目根目录{
"presets": [
"@babel/preset-env"
]
}
脚本运行示例"start": "nodemon --exec babel-node src/index.js",
笔记:- 安装依赖项时,不要忘记仅在开发阶段才使用--save-dev(-D)开关。至少对于语义是必要的。
关于短绒的需求
让我们从一个显而易见的事实开始:需要短绒。我们写代码,很多代码。如此之多,他们自己无法控制其均匀性。在团队开发中,此项目得到了不可思议的增强。统一性是代码可读性的关键。问题仍然在于短绒的严酷程度。选择哪个项目应该基于团队的规模,他们的专业水平,一个重要的标准就是项目本身。向项目添加一个简单的linter让我们安装依赖项:npm install eslint --save-dev
将.eslintrc配置文件添加到项目根目录:{
"env": {
"node": true,
"es6": true,
},
"extends": "eslint:recommended"
}
通常,这样的配置是不够的。在这里,您可以自己扩展规则,也可以仔细查看准备的更严格的选项。 ,
...
"extends": "eslint:recommended",
"rules": {
"quotes": ["error", "single"]
}
}
使用更严格的棉短绒基于相同样式指南,有几种流行的配置。- 谷歌
npm install --save-dev eslint-config-google
- 爱彼迎
npm install --save-dev eslint-config-airbnb-base eslint-plugin-import
- 惯用语
npm install --save-dev eslint-config-idiomatic
因此,有必要更正.eslintrc{
"env": {
"node": true,
"es6": true,
},
"extends": "google" | "airbnb-base" | "idiomatic"
}
还必须将linter的启动添加到单独的脚本中。"lint": "eslint ./src --cache && echo \"eslint: no lint errors\"",
"lint:fix": "eslint ./src --fix && echo \"eslint: no lint errors\""
关于应用程序启动
有权访问项目存储库的任何人都应该能够运行它。他是否可以执行此操作以及需要多少时间才能完成,这是您的项目质量标准之一。提前在README.md文件中逐步记录如何启动服务以及为主要操作规定命令非常重要。"start": "npm run dev",
"dev": "nodemon --exec babel-node ./src/index.js",
"build": "babel ./src --out-dir ./build",
"prod": "NODE_ENV=production node ./build/index.js",
"lint": "eslint ./src --cache && echo \"eslint: no lint errors\"",
要使用上述命令,您可能需要安装以下软件包:npm install --save-dev @babel/cli nodemon babel-node
注意:- 如果您甚至已将基本命令添加到package.json,仍请在README.md中描述启动过程。
结论
最初,本文希望涵盖有关在node.js上编写API的更多建议,但我希望在3-5分钟内完成。阅读文章。在得到良好反馈的情况下,将会出现续集。