如何在node.js上改善您的API服务。第1部分

现在,可以在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

笔记:

  1. 所有可执行文件都应位于./src中,
    这将使您可以将源文件与已编译的打字稿或babel分开,后者将位于./dist或./build中。
    由于目标文件位于单独的目录中,因此也将使配置lint和其他可配置工具变得更加容易。

  2. 所有控制器和路由实体放在单独的目录中,这将打开一个./routes或./controller,并且仅看到一个导入和导出子目录实体的index.js文件。
    这将允许您快速浏览现有功能,因为它仅描述了控制器或路由器的接口,而无需研究其实现。

关于Javascript编译


当然,您不能使用babel或打字稿来转换您的javascript。通常,新的ECMAScript标准很快就会出现在node.js中,并且您可以(基于浏览器的javascript除外)控制它们的支持。
但是我坚信它们值得使用。这就是为什么:

  1. 最新版本的Node.js并不总是可用于生产。
  2. 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",

笔记:

  1. 安装依赖项时,不要忘记仅在开发阶段才使用--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

注意:

  1. 如果您甚至已将基本命令添加到package.json,仍请在README.md中描述启动过程。

结论


最初,本文希望涵盖有关在node.js上编写API的更多建议,但我希望在3-5分钟内完成。阅读文章。在得到良好反馈的情况下,将会出现续集。

All Articles