NodeJs Feature

Node.js是一个构建在Chrome V8 JavaScript引擎上的JavaScript运行时. 作为一个异步事件驱动的基于javascript的运行时,Node.Js被广泛用于构建轻量级 & 可伸缩的但,网络驱动下的应用. Node.Js应用程序开发可以很容易地在两个方向上扩展——水平和垂直. 基于Node js的应用程序用于客户端和服务器端应用程序. 它有一个开源的JavaScript运行时生产环境/模型,提供单个模块的缓存. 因此,Node的流行.预计到2022年JS将增长更多.

In this blog, 九五至尊vi老品牌值得信赖将介绍使用node进行编程的一些重要的最佳实践.Js通过相关的代码示例. 通过这些最佳实践的实现, 该应用程序能够自动最小化JavaScript运行时错误,并转化为高性能, robust node.Js应用程序和节点进程. 注意,自从节点.js运行时是基于JavaScript的, 标准JavaScript最佳实践也适用于本文提到的编码实践之上. 这些最佳实践是适用的,可以用于 Node Js开发公司 and the entire Node.Js开发者社区-从专家到初学者编写“hello world”! 废话不多说,让九五至尊vi老品牌值得信赖来看看它们.

Node.JS项目结构最佳实践

1. 将解决方案除以组件

对于大型应用程序来说,最困难的事情之一是维护具有大量依赖关系的巨大代码库. 在添加新特性时,这会减慢生产和开发的速度. According to Node.js best practices, 九五至尊vi老品牌值得信赖应该把整个代码库分成更小的组件,这样每个模块都有自己的文件夹, 并确保每个模块都保持简单和小.

Solution By Component

As a part of Node.js development services, 一些经过试验和测试的最佳实践包括通过将整个代码库划分为模块化组件来开发模块化应用程序. 通过这种方式,九五至尊vi老品牌值得信赖不必与他人共享代码.g. api、服务、数据访问、测试用例等.)这使过程更容易. 这样就很容易推理了.

2. Layering Components

分层很重要,因此每个组件都被设计成“分层”. As a node.js best practices, 这些层有一个专门的对象,可以在web上使用, logic, and data access code. By doing this, 它可以清晰地分离性能问题,并可以显著地将流程与模拟代码和测试代码区分开来.

许多开发人员通过传递层对象(Express req, res)到服务层和数据层. 这使您的应用程序紧密耦合. 你的应用程序性能紧密耦合.

3. 在一个新项目中使用npm

Npm init将自动生成一个包.Json文件,显示NPM安装的所有包/节点app有你的项目的信息.

4. 将公共工具打包为npm包

较大的应用/项目过程通常会在不同的位置重复使用相同的代码. 九五至尊vi老品牌值得信赖可以将它们组合成一个单独的私有包文件,并在应用程序的不同位置使用该包. Npm安装消除了代码重复,使代码更易于管理.

5. 分开Express“应用程序”和“服务器”

许多开发人员在任何项目中最常犯的错误是在巨大的文件上定义整个快速应用程序过程. 相反,九五至尊vi老品牌值得信赖应该将“Express”定义分离到至少两个不同的文件中. 一个用于API声明(app.Js)和另一个网络问题. 九五至尊vi老品牌值得信赖还可以在多个组件中定位API声明.

6. 使用环境感知、安全、分层的配置文件

作为安全最佳实践, 九五至尊vi老品牌值得信赖应该使九五至尊vi老品牌值得信赖的应用程序级键易于从文件和环境变量中读取. 九五至尊vi老品牌值得信赖还应该在提交的代码之外保留秘密,并创建一个配置文件层次结构,以便更容易访问. 为了满足这一切,需要一个完美无瑕的配置设置. There are few node.Js开发项目结构,可以帮助做到这一点,如rc, nconf and config.

Also, 开发人员应该在他们的项目中利用NPMRC文件的力量, 哪一个可以在NPM初始化过程中自动重启一些环境生产配置,比如在项目包中设置元数据的生产.-作者名/电子邮件/授权详情/版本, 建立NPM注册表变更的生产, log levels, 日志消息输出级别发生变化, 安装全局模块等.

开发者可以设置默认值,可以通过npmrc文件使用以下命令设置:

7. Avoiding Garbage in-app

Node js的默认限制是1.5 GB单CPU核心作为进程管理器,但仍然使用贪婪和懒惰的垃圾收集器. 它一直等待,直到达到内存使用量并自行恢复.

如果你想对垃圾收集器有更多的控制,那么九五至尊vi老品牌值得信赖可以在V8上设置标志.

web: node --optimize_for_size --max_old_space_size=920 --gc_interval=100 server.js

您也可以尝试使用Docker映像运行应用程序. 如果应用程序运行在小于1的环境中,这一点很重要.可用内存使用率为5gb. 例如,如果您想要定制一个节点.js到一个512mb的容器,尝试:

web: node --optimize_for_size --max_old_space_size=460 --gc_interval=100 server.js

8. Hook Things Up

为了实现自动化,九五至尊vi老品牌值得信赖可以利用Npm的生命周期脚本来制作出色的钩子. 如果九五至尊vi老品牌值得信赖想在构建应用程序之前运行一些东西,九五至尊vi老品牌值得信赖可以使用preinstall脚本. 您可以使用JSON包中的安装后脚本来开发带有grunt的资产, 生产应用程序的Gulp和browserify或webpack.

In package.json:

"scripts": {
    "postinstall": "bower install && grunt build",
	  "start": "nf start"
}

要掌握这些脚本,您还可以 otherwise 使用环境变量.

"postinstall": "if $BUILD_ASSETS; then npm run build-assets; fi",
"build-assets": "bower install && grunt build"

如果脚本不受控制,可以将它们转换为文件.

"postinstall": "scripts/postinstall.sh"

Scripts in package.json automatically have ./node_modules/.bin被添加到它们的PATH中,所以你可以直接执行像bower或webpack这样的二进制文件.

应用程序的错误处理

9. 使用Async-Await或promise

良好的开发实践表明,使用javascript的“同步函数”进行多个回调内部承诺来处理异步错误,这个过程会导致回调地狱问题. 九五至尊vi老品牌值得信赖可以看看javascript的可用库或async和await来克服这个性能问题. 进程管理器将使用承诺函数捕获代码错误. 它降低了代码的复杂性,使代码更具可读性.

Code Example –  use promises

10. 集中处理错误

处理错误(如日志性能)的每个逻辑 , 发送九五至尊vi老品牌值得信赖错误的邮件应该以这样一种方式编写,以便所有api, night-jobs, 单元测试可以调试消息并在任何错误发生时调用此方法.

11. Validating Request Body

开发人员可以使用可用的开源包,如Joi,以确保请求体是正确的,不包含任何恶意内容. 九五至尊vi老品牌值得信赖可以在执行实际逻辑之前验证所有请求参数和主体参数以满足预期的模式. 通过这样做,九五至尊vi老品牌值得信赖可以在执行实际逻辑之前向用户输入抛出一个错误,即所请求的主体无效.

12. 使用内置错误处理机制

对于开发人员来说,有许多其他方法可以引发错误并解决它们. 它们可以使用字符串,甚至可以定义自定义类型. 内置错误对象提供了一种统一的方法来处理源代码和其他开源JSON包中的错误.

还建议记录错误及其名称和错误的其他Meta属性,以便容易识别.

13. 在返回之前总是等待承诺,以避免部分堆栈跟踪

When an error occurs, whether, 从同步流或异步流, 必须对错误流进行完整的堆栈跟踪. 令人惊讶的是,如果一个async函数返回一个承诺(e.g., 调用另一个async函数)而不等待, 然后会出现一个错误,使调用者函数在堆栈跟踪中消失.

这将让人们用部分信息来诊断问题——如果错误的原因在调用者函数内,那么就有一个特性v8, 也称为“零成本异步堆栈跟踪”,允许堆栈跟踪在最近的等待中不被切断. 但由于实现细节的重要性, 如果函数(sync或async)的返回值是一个承诺,那么它将无法工作. So, 在返回的承诺会被拒绝的情况下,避免堆栈跟踪中的这些漏洞. So, 九五至尊vi老品牌值得信赖必须始终通过等待来显式解决这些承诺,然后再从函数返回它们.

Code Style Node.js Best Practices

14. Use Linting Packages

有许多可用的染色工具, ESLint是最流行的检测包之一,它用于检查代码中可能的错误,否则你也可以 check code styles 达到最佳实践标准. 它可以识别任何可能导致任何安全威胁以及未来可能发生的应用程序破坏的潜在代码模式的间隔问题.

还有其他工具可以自动格式化代码,并将其以更可读的方式放置. 此外,它还解决了较小的语法错误,如在每个语句的末尾添加分号等.

15. Name Your Functions

您可以命名所有可能包含闭包和回调的函数. 可以限制匿名函数的使用. 确保你使用了命名功能. 命名将允许您简单地实现您想要的,然后获取内存使用的快照.

16. 常量、变量、函数和类的正确命名约定

作为标准的最佳实践, 九五至尊vi老品牌值得信赖应该使用所有的常数, functions, variables, 类名在声明时用小写. Also, 九五至尊vi老品牌值得信赖不应该使用任何简短的形式,而应该使用所有使用它的人都容易理解的完整形式. 九五至尊vi老品牌值得信赖应该在两个单词之间使用下划线.

Code Example

17. 使用Const Over Let,不要使用Var

赋值的Const变量不能被更改, 这将帮助你防止一个变量被多次使用,这样九五至尊vi老品牌值得信赖就可以保持代码的整洁. 在一些需要重新赋值变量的场景中,九五至尊vi老品牌值得信赖将使用let关键字. 例如,在循环中,如果九五至尊vi老品牌值得信赖想要重新声明变量值,九五至尊vi老品牌值得信赖可以使用let.

Apart from this, " let variables "已经阻塞了作用域, 这意味着它们可以在声明它们的特定块中访问. 使用var声明的变量可以在函数内的任何地方使用.

流程管理器是一个简单的命令行界面,它在所有项目中持续保持脚本流入.

18. 在开头添加必要的模块,避免内部函数

九五至尊vi老品牌值得信赖应该把所需的模块放在函数的开头,避免把它们放在函数的中间, 通过这样做,九五至尊vi老品牌值得信赖可以轻松地识别整个文件的依赖关系,并避免一些潜在的性能问题.

19. 按文件夹添加所需模块,而不是整个文件

We can place the index.Js文件,它导出模块的成员,以便九五至尊vi老品牌值得信赖可以将它导入到其他文件中. 它就像九五至尊vi老品牌值得信赖的模块的一个接口,使将来在不破坏约定的情况下进行更改变得容易.

Code example

20. 严格相等运算符(===)的使用

使用严格的相等运算符===代替较弱的抽象相等运算符===. ==会将两个变量转换为通用类型,然后进行比较,而===不会输入大小写变量, 并确保两个变量的类型相同且相等.

Example

当使用===时,以上所有语句都将返回false

21. 不要使用回调,而是使用异步等待

所有节点都支持Async-await.Node 8以上版本的LTS. 九五至尊vi老品牌值得信赖可以尽量减少使用“回调”和“承诺”来更好地处理异步代码. 它使代码看起来是同步的,但实际上,它是一种非阻塞机制. 使用async-await九五至尊vi老品牌值得信赖能做的最好的事情是使代码更紧凑,使代码语法像try-catch.

22. Using Arrow Functions (=>)

Arrow函数使代码更加紧凑,并保持了根函数(i.e. this). However, 建议使用async-await应用程序在使用可以接受承诺或回调的旧API时停止使用函数形参.

Node.js安全最佳实践

九五至尊vi老品牌值得信赖可以实现下面的安全实践来保留节点.Js应用程序免受攻击. In this blog, 九五至尊vi老品牌值得信赖已经确保涵盖了所有顶级的OWASP(开放Web安全项目)实践,以应对您遇到的所有Node js安全漏洞. 请在下面找到您的web应用程序的安全提示.

23. Use Lint Plug-ins

九五至尊vi老品牌值得信赖在Node中实现代码时,九五至尊vi老品牌值得信赖可以使用像eslint-plugin-security这样的linter插件来识别安全插件和漏洞.js.

Possible Errors

这些规则与JavaScript代码中可能的语法或逻辑错误有关:

for-direction 强制" for "循环更新子句将计数器移动到正确的方向.
getter-return 在getter中强制执行' return '语句
no-async-promise-executor 禁止使用async函数作为Promise执行器
no-await-in-loop 禁止在循环中使用await
no-compare-neg-zero 禁止与-0进行比较
no-cond-assign 禁止在条件表达式中使用赋值操作符
no-console 禁止使用“控制台”
no-constant-condition 不允许在条件中使用常量表达式
no-control-regex 禁止在正则表达式中使用控制字符
no-debugger 禁止使用' debugger '
no-dupe-args 禁止在'函数'定义中重复参数
no-dupe-else if 禁止if-else-if链中的重复条件
no-dupe-keys 禁止对象字面量中的重复键
no-duplicate-case 禁止重复的case标签
no-empty 禁止空块语句
no-empty-character-class 禁止在正则表达式中使用空字符类
no-ex-assign 禁止在' catch '子句中重新分配异常

检测插件,这确保九五至尊vi老品牌值得信赖在开发过程中消除易受攻击的代码.

24. 使用中间件防止DOS攻击

当合法用户没有接收到所需的服务或接收到降级的服务时, 在这里,九五至尊vi老品牌值得信赖可以确保九五至尊vi老品牌值得信赖的节点应用程序受到DOS攻击的威胁.

防止这种情况发生, 九五至尊vi老品牌值得信赖应该使用中间件来实现应用程序的罕见限制. For larger apps, 有一些插件可用,如速率限制-灵活包, Nginx, cloud firewalls, cloud load balancer.

25. Prevent SQL Injections

当你频繁使用JS字符串或字符串连接时, 这增加了数据库操作的风险. 这种做法会使您的信息无效, 开发的应用程序极易受到SQL注入攻击.

针对某些SQL注入攻击的内置安全性可用于Sequelize和mongoose等orm. 必须始终使用对象-关系映射/对象文档映射ORM/ODM或支持索引参数化查询的数据库库提供的内置索引参数化查询来避免这些攻击.

Bad example:

Good example:

26. 安全传送数据

对于九五至尊vi老品牌值得信赖的应用程序来说,数据传输中的完整性和保密性是非常重要的. 破坏九五至尊vi老品牌值得信赖数据的应用程序安全性和机密性的一个主要原因是测试基础结构中的一些加密错误配置.

像TLS(传输层安全)和SSL(安全套接字层)这样的协议, 用于在客户端和服务器(web服务器和浏览器)之间建立加密的端到端连接。. SSL使用强密码和安全算法, 对于客户端-服务器通信,TLS以同样的方式确保敏感数据(如卡片详细信息和用户凭证)的安全传输.

27. Manage HTTP Headers

为了防止点击劫持, 跨站点脚本(XSS攻击), 以及其他恶意攻击, 您可以在有影响的节点上创建一个新的影响.带有安全HTTP头的js应用程序. 九五至尊vi老品牌值得信赖可以使用像头盔这样的插件,它很容易配置和创建九五至尊vi老品牌值得信赖自己的节点.js security rules.

Recommendation:

按照项目的要求使用HTTP头,如下所示

  • Access-Control-Allow-Origin:这表示是否可以从给定的原点与请求客户端共享响应.
  • Server:描述生成响应的服务器信息.
  • 严格传输安全:确保通过HTTPS而不是HTTP访问网站.
  • X-Content-Type-Options:确保不能更改内容类型中提到的MIME类型. 通过这种方式,可以限制应用程序对MIME类型进行嗅探.
  • X-XSS-Protection:在旧版本的IE中, 当Chrome和Safari发现XSS攻击时,它会阻止网页的加载. 当站点实现了强大的内容安全策略时,现代web浏览器不需要这种产品设置,因为它已经禁用了内联javascript.
  • X-frame-options:这个报头确定一个页面是否允许在frame/iframe中呈现.
  • 内容安全策略:这有助于跟踪和停止威胁,如XSS攻击(跨站点脚本)和数据注入. 这些攻击会导致数据盗窃、站点损坏和恶意软件的传播.
  • referrer - policy:它控制在请求中应该包含多少referrer信息

Recommendation:

按照项目的要求使用HTTP头,如下所示

移除下面的HTTP头文件,

  • x-powered-by: 它由服务器设置,以显示被请求的服务器类型. 它揭示了用于开发对攻击者有用的应用程序的技术.

28. 检查易受攻击的依赖

In any Node.js application, 九五至尊vi老品牌值得信赖可以使用各种流程管理工具中可用的任何开源包. 九五至尊vi老品牌值得信赖必须始终确定软件包有哪些依赖项,以及不时制作了哪些补丁,以保证应用程序的安全. 在这里,九五至尊vi老品牌值得信赖使用nsp或snyk等工具实现函数, and npm audit, to track, monitor, 和修补漏洞.

L../code/vacasb.github.10 node v10.15.1] (update-deps) $ npm 1
 npm WARN friendly-errors-webpack-plugin@1.7.0需要webpack的对等体@^2.0.0 || ^3.0.0
 
audited 28156 packages in 8.916s
found 24 vulnerabilities (10 low, 11 moderate, 2 high, 1 critical)
运行' npm audit fix '来修复它们, or ‘npm audit’ for details

29. 控制请求有效载荷大小

当应用程序上的流量增加时, 很难处理其他重要的请求, 这会降低应用程序的性能,并使九五至尊vi老品牌值得信赖的应用程序暴露于拒绝服务(DOS)攻击. 更大的请求体由单个线程执行.

因为载荷更大, 攻击者甚至可以在不发出多个请求的情况下实现漏洞. 九五至尊vi老品牌值得信赖可以通过使用仅接受小型有效负载的表达式体解析器来限制体的大小.

Example:-

如果请求有效负载大于指定的限制,表达式体解析器将抛出错误.

请求实体太大

当输入的正文超过“limit”选项中提到的大小时, Express抛出上述错误. 在字节限制中设置的限制和设置为体的长度的长度. 状态设置为413,类型设置为‘entity’.too.large’.

30. 从客户端隐藏错误细节

In the node.九五至尊vi老品牌值得信赖应该使用九五至尊vi老品牌值得信赖自己的错误处理程序,它能够处理服务器错误. While doing that, 九五至尊vi老品牌值得信赖必须防止将整个信息透露给用户,因为这可能会暴露应用程序的一些敏感数据,如文件的物理路径, connection string, sensitive code, etc.

错误文件的坏示例:

SequelizeForeignKeyConstraintError: update or delete 表驱动违反外键约束 “drivers_driver_id_fkey” on
table " drivers_devices"
at Query.format Error (D:\Projects\api-
2\api lambda drivers.webpack\service webpack:\ node_modules seguelize lib \ \ postgresquery方言.js:295:1)
at
query.catch.err (D:\Projects\api-
2\api lambda drivers\.webpack service webpack:\ node_modules sequelize \ lib \ \ postgresqueryjs方言:72:1)
at
tyCatcher (D:\Projects\api-2\api lambda drivers\.webpack\service webpack:释放\ util \ node_modules \蓝鸟.js:16:1)
 
 at Promise. settlePromiseFromHandler (D:\Projects\api-
2\api lambda drivers\.webpack\service webpack:\ node_modules \蓝鸟是释放\承诺.js: 547:1)
at
Promise. settlePromise (D:\Projects\api-
2\api lambda\drivers\.webpack\service\webpack:\ node_modules \蓝鸟是释放\承诺.js:604:11
at
Promise._settlePromised (D:\Projects\api-
2\api lambda drivers.webpack\service\webpack:\ node_modules \蓝鸟是释放\承诺.js:649:1}
at
Promise. settlePromises (D:\Projects\api-
2\api lambda\drivers\.webpack\service webpack:\ node_modules \蓝鸟是释放\承诺.js:725:1)
at
drainQueueStep (D:\Projects\api-2\api lambda\drivers webpack\service webpack:\node_modules\bluebird是异步发布的.js:93:1)
   at_drainQueue (D:\Projects\api-
2\api lambda drivers\.webpack service webpack:releaselasync \ node_modules \蓝鸟.is:86:1)
at
Async../node_modules/bluebird/js/release/async.is. Async._drainQueues (D:\Projects\api-
2\api lambda\drivers\.webpack\service\webpack:\node_modules\bluebird是异步发布的.js:102:1)
at
Immediate Async.drainQueues (as_onlmmediate) (D:\Projects\api-
2\api lambda\drivers\.webpack\service webpack:\node_modules\bluebird是异步发布的.is:15:1)
at runCallback
(timers.is: 705:18)
at tryOnlmmediate (timers.js:676:5)

Good Example

{“message”: 请求的资源已经存在 in use, you cannot delete it.}

31. 为NPM或Yarn配置2FA

攻击者可以利用用户敏感信息,并在项目库中安装恶意软件, 即使九五至尊vi老品牌值得信赖使用多因素身份验证(MFA). 如果攻击者将恶意软件插入公共领域, 降级整个web程序和web应用程序是可能的. Therefore, with npm/yarn, 九五至尊vi老品牌值得信赖必须使用双因素认证2FA, 这让黑客们几乎没有希望了.

测试和整体质量的最佳实践

32. 实现自动化测试

您应该以这样一种方式来规划您的项目截止日期,即开发人员开发的所有功能都可以坚持自动测试. 它有助于在不实际调用api的情况下测试api. 九五至尊vi老品牌值得信赖可以模拟数据库调用, 此外,它还可以确保在实现新功能后,其他人所做的最后更改是否没有被破坏.

33. Structuring Test

你可以使用Arrange, Act & 断言(AAA)用3个分离良好的部分来组织测试. Arrange包含后续调用或比较实际结果和预期结果时使用的所有数据、参数或预期输出, Act -调用具有所有安排的参数的实际实现, 断言——将实际结果与预期结果进行比较.

Code example:

34. 用Linter检测代码问题

九五至尊vi老品牌值得信赖可以使用像eslint-plugin-security这样的linter插件来捕获编码节点时的代码问题.js app. 检测插件,这确保九五至尊vi老品牌值得信赖在开发时消除易受攻击的代码.

35. Avoid Global Mock Data

在编写测试用例时,九五至尊vi老品牌值得信赖应该为每个流程用例使用单独的模拟数据,而不是将其声明为全局的并每次都修改它.

Good Code example:

Bad Code Example:

36. 检查脆弱的依赖关系

九五至尊vi老品牌值得信赖可以使用NPM审计或snyk等工具.IO检查易受攻击的依赖项.

37. Tag Your Tests

在许多情况下,九五至尊vi老品牌值得信赖必须运行冒烟测试等测试, 在向源代码控制系统提交更改之前,或者在创建pull请求时. 九五至尊vi老品牌值得信赖可以通过在带有不同关键字的测试中使用标签来做到这一点.

38. Check Test Coverage

每个测试环境都带有这个特性,它显示在测试用例下转换了多少百分比的代码. 一些框架还显示不同颜色的文本,以确定代码是否被覆盖, 或者覆盖了代码,但没有覆盖分支, etc. 九五至尊vi老品牌值得信赖可以在提交代码之前设置测试覆盖率%的最小限制,以确保大多数语句都被覆盖.

39. 检查过时的包裹

九五至尊vi老品牌值得信赖添加任何开源包时,九五至尊vi老品牌值得信赖必须定期检查它是否过时. 九五至尊vi老品牌值得信赖可以使用npm-check-update等可用包来做到这一点. 九五至尊vi老品牌值得信赖可以将它添加到CI-CD管道中,以便它在将代码部署到生产环境之前检查所有包是否都是最新的, otherwise, 构建失败,并显示特定包过时的通知.

40. 使用与真实数据相似的模拟数据

In end-to-end testing, 九五至尊vi老品牌值得信赖不应该使用实时数据,但九五至尊vi老品牌值得信赖应该使用与真实数据相同的数据,这样它就不会影响真实数据,并可以执行适当的测试.

41. 使用静态分析工具

Tools like SonarQube 和Code Climate可以进行静态分析,帮助提高代码质量, 性能和保持九五至尊vi老品牌值得信赖的代码易于管理. 九五至尊vi老品牌值得信赖可以将这些工具添加到CI-CD管道中,当它们检测到任何九五至尊vi老品牌值得信赖可以提高代码质量以提高性能的区域时,就会导致构建失败.  .

Docker Best Practices

42. 避免npm启动时,使用节点命令进行引导

你可以尝试使用CMD [' node ', ' myServer ..Js ']来启动你的应用程序,而不是使用NPM脚本. 背后的原因是npm脚本不能将操作系统信号传递给代码. 此外,当没有传递信号时,您的代码不会通知任何系统关闭. 因此,您的代码有可能失去正确关闭当前运行的请求和数据操作的能力. 因此,从稳定性的角度来看,尽量避免使用docker使用npm脚本.

43. 在生产发布之前清理依赖项

当映像被传送到生产中时, 它必须没有任何类型的开发依赖,而且必须是最小的. 即使开发依赖在构建和测试生命周期中是必要的, 最终,九五至尊vi老品牌值得信赖需要确保生成的产品图像是无杂乱的. 这保证了潜在攻击的数量最小化. 此外,值得注意的是,许多臭名昭著的安全漏洞 & 在开发包中发现了漏洞.

当开发团队决定使用多阶段构建时,实现它是非常容易的. 你需要做的就是安装所有的依赖项,然后最后运行下面的命令:

npm ci --production

44. Avoid secrets in args & 明确构建时的秘密

应该确保docker构建环境中没有泄露秘密变量. 之所以会出现这种情况,是因为docker映像在多个环境之间共享,而这些环境的消毒程度不如生产环境. 这样的文件可以避免这种情况 .npmrc. We can copy secrets to .NPMRC和之后, 九五至尊vi老品牌值得信赖可以使用Docker构建工具包和多级构建秘密功能来删除它们,这不会留下任何痕迹.

45. Clean NODE_MODULE cache

在安装依赖项之后删除本地缓存是一种很好的做法. 因为Docker的镜像是不可变的,所以复制依赖以实现更快的安装是有意义的.

If this is not done, 然后,生成的图像将被运送到生产中,其大小将增加30%,其中包含永远不会使用的文件.

46. Lint your Dockerfile

检测总是很重要的,dockerfile的检测也不例外. 它可以识别dockerfile与最佳实践不同的问题. 使用一个专门的Docker内衬, 如果专家检查了潜在的缺陷, 他可以很容易地找到九五至尊vi老品牌值得信赖的性能和安全改进,这可以节省浪费的无数小时,甚至可以节省检查生产代码中的安全问题的时间.

Node JS性能最佳实践

47. 确保不要阻塞事件循环

必须避免cpu密集型任务,因为它们有可能阻塞大多数单线程事件循环. 它们甚至将单线程事件循环卸载到专用进程, thread, 甚至根据上下文使用不同的技术.

因为事件循环被阻塞,节点.Js将无法管理其他请求,这可能会导致并发用户的延迟. 内容可能已经准备好了, 多个用户可能已经准备好响应, 但是如果一个请求阻碍了服务器返回结果, it can all be wasted. 因此,最好确保不阻塞事件循环.

48. 原生JS应该优先于用户-陆地utils

使用像lodash这样的实用程序库而不是本机方法通常会消耗更多的资源,因为这会导致不必要的依赖和整体性能较低. 全新的V8引擎和ES标准, 本机方法的性能比以前更好,比实用程序库快50%. 因此,在必要时尽量避免使用实用程序库.

生产的最佳实践

49. 使用智能日志增加透明度

在项目开始时,日志通常会被忽略,但是在调试可用于生产的复杂应用程序时,日志可能是一种救命工具. 所以建议从第一天开始就计划好你的日志. 应该为收集定义一个适当的框架, storing, 并对日志进行分析,以确保在需要的时候能够轻松地提取所需的信息.

50. Lock Dependencies

在NPM5之前,它默认允许依赖项在不同的环境之间移动. 为了克服这个问题,九五至尊vi老品牌值得信赖应该使用npm配置文件(.Npmrc)建议将每个包的确切版本保存到每个环境中.

51. Utilize all CPU cores

九五至尊vi老品牌值得信赖讨论Node应用程序的基本形式时, 九五至尊vi老品牌值得信赖可以看到它运行在一个CPU核心上,而所有的核心都是无效的. 因此,开发人员有责任利用所有CPU内核来减少性能瓶颈. 对于中小型应用程序,可以使用PM2或Node Cluster. 对于更大的应用程序, 必须考虑使用一些部署脚本或基于Linux init系统的Docker集群来复制该过程.

52. Guard the memory usage

Node.Js与内存管理的关系很微妙. v8引擎对内存使用有一些软限制(1.4GB). Besides this, Node的代码中甚至存在一些已知的内存泄漏,因此, 必须监视Node的内存使用情况. 小型应用程序可以定期使用shell命令,但大型应用程序可以考虑使用健壮的监控系统来控制Node的内存使用情况.

53. Node外的前端资产

将前端资产存储到S3、CDN等专用位置是一种很好的做法. 因为节点的单线程模型会影响它处理许多静态文件的性能.

因此,始终建议将前端资产存储到专用存储中,而不是在节点服务器中.

54. 使用自动漏洞检测工具

即使是最著名的依赖项,如Express,也存在可能使系统处于风险中的已知问题. 通过使用商业和社区工具,可以很容易地纠正它,这些工具不断地检查系统的漏洞并发出警告,以便有人可以立即解决它们.

55. Set NODE_ENV=production

最佳实践是始终将环境变量NODE_ENV设置为“开发”或“生产”,以指示是否应该调动生产优化. 这一点很重要,因为许多npm包会发现当前环境,然后尝试优化它们的代码以适应生产环境.

56. 最好使用Node的LTS版本.js

使用Node的长期支持版本为您提供了获得关键bug修复的额外安全性, security updates, 以及更长期的性能提升. 因此,建议使用Node的LTS版本.除非有充分的理由不这样做.

57. 总是用npm ci安装包

当涉及到安装包时, 需要确保产品代码总是使用您测试它所用的相同版本的包. 因此,运行npm ci会严格地对包锁对应的依赖项进行干净的安装.json and package.json. 建议在CI/CD管道等自动化环境中使用此命令.

Conclusion

通过注册行业标准Node.js的最佳实践,九五至尊vi老品牌值得信赖要确保所有Node.Js的抱负者从他们的开发之旅开始就采用它们来生产高质量的生产应用程序. 这些最佳实践对于希望完善Node的有经验的开发人员也同样有价值.js skills. 在这些编码最佳实践的帮助下, 风格指南和技巧, 您可以轻松地提高应用程序的性能.

九五至尊vi老品牌值得信赖给出了Node的信息图形表示.js Best Practices. Take a look:

NodeJS-Infographics
想要嵌入这个图像? Please cite source to 九五至尊vi.com

在您的网站上分享此图片

请包括归属九五至尊vi.com with this graphic.
<a href="http://www.purlyarn.com/blog/node-js-best-practices/”><img src="http://www.purlyarn.com/blog/wp-content/uploads/2021/02/NodeJS-Infographics.jpg" alt="Nodejs Best Practices" width="952" height="3948">a>

九五至尊vi老品牌值得信赖Node的常见问题.js (FAQ)

Q1.Node js的最佳实践是什么?

Node.Js是开发健壮且可伸缩的web应用程序时最受欢迎的选择之一. Node的功能.Js在软件开发过程中带来了很大的不同,这是因为你遵循了最佳和经过测试的实践.

  • 尝试在npm中启动所有的项目.init. 这将支持相同的项目设置,以获得更简单的性能,也将得到改进.
  • 节点包管理器——NPM的设置是开发人员在同一类型的javascript环境中工作的另一种重要方式,无需特定的依赖关系.
  • 您可以将脚本添加到包中. 这将标准化所有命令,并为应用程序的启动增加价值.
  • 配置管理的操作应该到位. 这可以通过从Github加载环境变量来实现.
  • Javascript还提供了一个简单的样式指南, 你可以调整最适合你的业务.
  • 通过维护异常管理策略,为错误做好准备
  • 尝试执行自动漏洞扫描.
  • 最大限度地使用日志库,以获得更好的视野和错误管理.

Q 2. Node如何更好更快?

Node js是一个更好更快的应用程序,但它的成功还有很多方面. Nodejs是单线程的,因此操作没有等待时间. 所有操作都创建了独立的线程,这使得它更快、响应速度高. Also, javascript采用JIT编译,与机器函数相结合,提高了执行速度. 这再次使应用程序运行得更快,并显示出改进的结果.

Q3. 哪个节点框架是最好的?

框架是节点中不可替代的部分,因此选择最适合您的框架非常重要. 下面是你可以为你的网页应用选择的最佳框架列表.

  1. Express.js -目前最好的框架之一,有大量的新功能
  2. Socket.io—最适合具有清晰和清晰API的全栈开发平台.
  3. Hapi-它是一个开源节点.Js框架,内置插件,简化了开发过程,增强了用户体验.
  4. Feathersjs-这是一个后端开发工具,确保快速修复bug的灵活性和便利性.
  5. Total.js-该框架提供了类似cms的体验,具有未来物联网的范围, REST服务的合理成本.

Q4. Node js比PHP更安全吗?

Node.js比PHP更安全、更快,因为它是轻量级的、异步的. 由于使用了更强大的Javascript代码进行备份,因此不存在中断过程的安全阻塞或威胁. 它也由NPM包管理,NPM包也在前端为客户端和服务器端处理保持安全.

Q5. 为什么Node JS比Java快?

虽然从技术上讲,这不是一个很好的比较,因为Java是一种语言,而node.js是一个建立在Javascript基础上的生态系统. Node js可以在多种框架下工作,但与Java相比,它是轻量级和简单的. 它还提供了代码编写的方便和速度,这使得它更受欢迎. Also, 对于Java,您需要JVM或JIT编译和一些高级语言,如Scala来编写代码. 这有时会使过程复杂化,而在Node中,它有NPM管理和其他库函数,可以毫不费力地管理所有类型的依赖. 因此Nodejs比Java快.

Q6. Is node the same as MVC?

不,Node与MVC不一样. 之所以会出现这种混淆,是因为它们都是以设计为中心的. 将两者进行比较是不对的,因为MVC是一种体系结构,而Node只是一种基于框架的生态系统. MVC架构全面负责应用程序的开发,并有许多其他属性同时发挥作用. While Node.js是真正独特的-而不是一个框架,Node.Js是一个为服务器设计的跨平台运行时环境. 曾经你可能只在客户端编程中看到JavaScript, Node.js标志着一点革命,它照顾到应用的视图方面.

Q7. 什么时候我应该使用Node JS?

使用Nodejs是一个确定的决定,但什么时候使用Node.Js取决于你的需求和应用是什么. 下面是节点时的一些业务场景.Js在过去表现得最好.

  • Node的最佳应用.js可以在在线游戏等实时应用程序中看到, chat rooms, 或者任何其他类型的实时需求. 这些框架的响应速度非常快,因此用户可以立即对所有查询或操作做出响应.
  • 如果您有一个低负载的应用程序和较少的CPU周期,那么这个方法非常适合您. 非阻塞系统受到压力,消耗大量的CPU周期,从而延迟了整个周期和时间.
  • 它在原型、敏捷开发和快速产品迭代方面也表现最好.

其他最佳实践博客:

  1. Angular最佳实践和安全
  2. React最佳实践和安全
  3. VueJS最佳实践与证券
  4. 软件测试的QA最佳实践
  5. DevOps Best Practices
  6. SharePoint的最佳实践
  7. .NET Core Best Practices
profile-image
Vishal Shah

Vishal Shah对多种应用程序开发框架有广泛的理解,并掌握了新的趋势,以便在动态市场中努力和繁荣. 他在技术和商业方面培养了自己的管理成长,并通过博客文章提供了自己的专业知识.

Related Service

了解更多九五至尊vi老品牌值得信赖的NodeJS开发服务

Learn More

想要雇佣熟练的开发人员?


    Comments

    • Leave a message...

      1. Shivani Mani

        我曾经读过这个博客,它对我的项目帮助很大. 这真的是一个资源丰富的博客. 感谢您对这个社区的贡献,并使开发人员更容易学习和提高他们的技能.

      2. Jay Hunter

        Node诞生于13年前. 尽管时间很短,但它已经取得了很大进展,并帮助全球公司降低了开发成本, 提高生产力,减少等待时间. 与其他框架相比,比如28年前发布的PHP和27年前发布的JavaScript, Node.JS在竞争中遥遥领先.

      3. Atticus Rowland

        我从Node中学到的最好的一件事是,如果您正在构建一个大型应用程序, 确保您将代码库划分为更小的组件,这将帮助您添加新特性,而不必担心由于庞大的代码导致应用程序变慢.

      4. Arlo Roman

        跨站脚本(XSS)是一种安全漏洞,您可以在其中插入恶意代码,并借助恶意代码提取用户信息,还可以代表用户执行用户操作. 这种类型的攻击在影响用户浏览器的web应用程序中最常见.

      5. Rura Havaldar

        What is an XSS attack?

      6. Harvey Wright

        非常感谢这篇九五至尊vi老品牌值得信赖Node JS最佳实践的文章. 我想知道有哪些类型的应用程序可以在Node JS的帮助下构建?

        1. Ambika Chauhan

          可以构建的常见应用程序是, Streaming apps, Chat applications, 复杂SPA(单页应用程序), 实时运行的协作工具, 物联网或互联网或事物.

      7. Nisha Naidu

        我的网站在今年早些时候遭遇了DOS攻击. 这可以通过使用各种工具和与托管提供商沟通来解决. 我已经安装了一些反DOS攻击工具,如果你想防止,我会建议添加.

      8. Jayesh Iyer

        这对我来说是新东西,我不知道“内置错误处理机制”. 也许我是一个初级开发人员,这就是为什么. :)

      9. Gaurav Dubey

        Node更好,因为它在开发web应用时提供了来自服务器的快速且一致的回调, Node JS是需要实时数据功能的应用程序的完美匹配,它也使动态单页应用程序的开发变得有效.

      10. Anupam Date

        为什么使用Node比使用PHP更好?

      11. Lily J.

        NPM是节点包管理器的缩写. NPM有两个功能:它是一个命令行工具,可以帮助安装, updating, 或卸载Node JS包, 它也是一个开源Node JS包的在线存储库, 世界各地的节点社区创建有用的模块,并将它们作为包发布在这个存储库中. 希望这能回答你的问题.

      12. Jay Cook

        有人能帮我一下吗? NPM是什么意思?

      13. Carla Paul

        你好,Eva,我希望这将解决你的查询:回调是一个函数的异步等效. 在任务完成期间,会调用一个回调函数. 由于Node大量使用回调, Node的所有api都以支持回调的方式编写.

      14. Eva Lowe

        "回调"是什么意思?

      15. Miles Coper

        这篇文章写得很好, 我唯一不明白的是, 什么是异步事件?”

        1. David G.

          Hello Miles, 如果代码是异步代码,则意味着它可以独立于其他代码单独运行,而异步事件是在应用程序主线程之外运行的事件. Example: 两个同步事件(X和Y):首先X做某事. 当X完成时,Y做一些事情. 两个异步事件(X和Y): X和Y同时做一些事情,两个事件都不等待另一个事件. 希望你满意.

      16. Mia Burnett

        本博客几乎包含了您的第一个节点开发项目所需的所有最佳实践,如如何构建您的项目, How to handle errors, Styling your Code, Node的安全最佳实践, 以及整体质量和测试. 作为一个初级开发人员,我发现这个博客是一个金矿. 你读得越多,探索得越多,你就能从中获得更好的理解和知识.