标签:node.js

Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境。

2021年WEB全栈开发技术栈

在面对无数的工具的时候,选择就变成是个技术活,合理的组合可以提高项目开发效率,让团队合作更加友好。本文将从个人的经验出发介绍2021年全栈开发的技术栈,作为自己学习的目标,但这不唯一。

NodeJs 全栈创建多文件断点续传

文件上传,算是项目开发中比较常见的需求,本文将展示如何构建一个多文件断点续传组件,可以同时处理多个文件,并可以在出现异常或者网络中断的情况下恢复上传,可以手动暂停和恢复文件的上传

Node.js 日志最佳实践指南

在开发阶段,无论是日志记录还是调试,都可以很容易地跟踪程序并检测到错误。但是在生产环境中,应该考虑更多关于日志记录的问题,因为这对于应用程序的监视和故障排除非常关键。

Node.js 日志之winston使用指南

Winston 是强大、灵活的Node.js 开源日志库之一,理论上, Winston 是一个可以记录所有信息的记录器。这是一个高度直观的工具,易于定制。可以通过更改几行代码来调整其背后的逻辑。它使对数据库或文件等持久存储位置的日志记录变得简单容易。

Node.js 17 新特征

Node.js v17.0.0,是 JavaScript 运行时的最新主要版本,上个月刚发布。它将取代运行时当前发行版中的 V16。 而 V16 现在有望在 2021 年 10 月 26 日升级到长期支持 (LTS) 频道,因为它是偶数版本。 尽管是一个相对较小的更新,但此版本为运行时带来了多项改进,包括更多承诺的 API、JavaScript 引擎升级和 OpenSSL 3.0 支持。

Nodejs、GraphQL、MongoDB、Hapi 和 Swagger 构建 API(一)

可重用 API 流行的最大原因是 API 允许使用来自 Web 客户端、移动应用程序、桌面应用程序的数据,实际上是任何客户端。将构建一个基于 Nodejs,由 MongoDB 数据驱动的强大而灵活的 GraphQL API,并支持 Swagger 文档。 API 的主要骨干将是 Hapi.js 来完成,接下来将详细介绍所有技术。最终实现一个拥有非常强大的 GraphQL API 和出色的文档。最重要的是将与客户端的集成(React、Vue、Angular)

Node.js 基于区块链的游戏应用的首选

使用 Node.js 的开发可以提升开发效率,可以同时处理多个连接。该技术得到数百万专业开发人员的支持,并提供出色的用户体验。它有一个巨大的模块库,减少重复造轮子,还增强了灵活性和可扩展性。 Node.js 开发人员在移动应用程序开发和 Web 应用程序开发中使用的代码减少了 33%,以提供与其他编码语言一样的结果。

简述 YAML

YAML是一种数据序列化语言,可让以紧凑且可读的格式存储复杂数据。它对于 DevOps 和虚拟化来说很重要,因为它对于构建高效的数据管理系统和自动化至关重要。

理解 GraphQL 类型系统

作为一种为灵活性而设计的 API 技术,GraphQL 是 API 的开发人员和消费者以及他们背后的组织的强大推动者。GraphQL 实现的所有细节和功能都在 GraphQL Schema 中列出。为了编写一个有效的 GraphQL schema,必须理解好 GraphQL 类型系统。

1怎么使用 docker 开发调试 node 项目?

在本节中,将创建一个Node.js的“Hello World”应用程序,并将该应用构建成Docker镜像,并从容器启动。正常情况下,该镜像可以部署到生产服务器上,Docker Compose 将用于覆盖一些设置以创建开发和调试环境。这样可以在主机PC上进行编码开发,这样文件将在一个持续运行的容器中执行。这有几个好处:

  • Docker 将管理所有依赖项—— 不需要安装和维护runtimes
  • 这个过程与本地开发没什么不同——可以使用任何喜欢的编辑器和工具
  • 容器是隔离的——应用程序影响到主机PC,如使删除文件
  • 任何时候都可以将应用程序分发给其他开发人员或测试人员——应用程序可以在任何其他设备上以零配置相同的方式运行。

本节创建的代码文件在项目 https://github.com/QuintionTang/docker-nodejs

基于容器的应用开发

Docker 简化了 Web 开发:任何的 Web 应用程序都可以在单个容器中运行。

但是……如果想将类似的容器部署到实时生产服务器,应用程序通常是无状态的。这样可以启动任意数量的实例,任何实例都可以对请求做出响应。实际上,应用程序不应该将基本状态数据存储在本地文件或内存中。

例如:当用户登录时,应用程序将登录凭据存储在内存中。在开发过程中使用单个容器,都可以按预期运行没有问题。

如果将应用程序部署到生产服务器并在两个以上容器中运行,这些容器通过负载均衡接收请求。用户访问系统由 container1 处理其登录。那么下一个请求可能就由 container2 提供服务,容器之间并没有共享登录状态,这个时候就会出现未登录的情况。

当然上面的问题是可以通过解决的,为隔离的容器提供一个中心存储服务,维护应用的持久化存储数据,例如数据库。

无状态 Web 应用程序是一个不错的方式。这样在生产环境中随着用户情况的增加可以快速进行扩缩容,自动添加更多的机器/容器。在解决实际需求的时候就需要考虑是否适合无状态,如果对有状态的应用程序进行转换可能是不可行的。

这些在开发过程中都无关紧要,因为通常只会在单个容器中运行应用程序。如果不实用,就不必在生产中使用容器。

什么是 Node.js

这个想必大部份掘金的小伙伴都知道,这里不展开介绍,引用一段简单的说明。

Node.js 是一种流行的、高性能 JavaScript 运行时,使用 Chrome 浏览器的 V8 JavaScript 引擎构建。它通常用于服务器端 Web 开发,但也已被前端或客户端用来构建工具、桌面应用程序、嵌入式系统等所采用。

安装 Node.js 后,可以使用以下命令执行 JavaScript 文件:

node index.js

单入口脚本文件是什么?理论上它可以命名为任何名称,通常项目都使用index.js 作为入口。

前面的内容一直在使用 Docker Hub 提供的 Docker 镜像。本节将介绍如何构建自己的 Docker 镜像,该镜像可以在开发和生产环境中安装和执行应用程序。

可能你对 Node.js 不感兴趣,但是不管使用何种语言(PHP、Python、Ruby、Go、Rust等)都适合使用 Docker 。

Hello World应用概述

该项目将使用Node.js的Express.js框架创建了一个“Hello World”应用程序。

应用运行地址为:http://localhost:3000/,返回纯文本格式:Hello World!

从客户端 Ajax 请求调用相同的 URL 会返回 JSON 编码的对象:

{ "message": "Hello World!" }

当传入请求的HTTP 标头设置为时,可以识别 Ajax 调用。这是由大多数 Ajax 库添加了:X-Requested-WithXMLHttpRequest

可以向 URL 路径添加字符串,例如http://localhost:3000/devpoint 将返回 Hello Devpint!,响应内容为:

{ "message": "Hello Devpoint!" }

项目初始化

在项目目录中执行以下代码初始化项目:

npm init

Docker 调试NODE应用

输入基本的信息后,会在项目根目录下生成 package.json

接下来安装 express ,执行一下命令:

npm install express --save

为了开发过程中能够响应代码的变更,接下来安装 Nodemon,执行以下命令:

npm install nodemon --save-dev

nodemo 用来监听 node.js 项目中文件的更改并自动重启服务的工具,接下来为项目增加监听规则,如需要忽略的目录:

{
    "script": "./index.js",
    "ext": "js json",
    "ignore": [
        "node_modules/"
    ],
    "legacyWatch": true,
    "delay": 200,
    "verbose": true
}

修改项目 package.json ,在scripts属性下添加启动命令:

"start": "node ./index.js",
"debug": "nodemon --trace-warnings --inspect=0.0.0.0:9229 ./index.js",

这样在终端可以执行一下的命令:

  • npm start : 一般用于生产环境
  • npm run debug :用于开发调试

应用脚本 index.js

脚本在根路由下定义简单的响应请求

"use strict";
const port = process.env.NODE_PORT || 3005, // 定义HTTP默认端口或者从NODE_PORT环境变量获取
    express = require("express"),
    app = express();
// 根路由
app.get("/:title?", (req, res) => {
    const message = `Hello ${req.params.title || "Devpoint"}!`;
    if (req.xhr) {
        res.set("Access-Control-Allow-Origin", "*").json({ message });
    } else {
        res.send(message);
    }
});
// 启动HTTP服务
app.listen(port, () => console.log(`server running on port ${port}`));

接下来开始执行脚本:

npm run debug

打开浏览器输入http://localhost:3005/,可以看到响应的响应,如下

Docker 运行node应用效果

现在可以尝试去修改脚本 index.js 的内容,当有更新的时候,终端会重启服务,刷新浏览器即可看到更新。

docker 环境下调试node应用

到目前为止,一个简单的NodeJS应用程序已经完成。接下来将介绍如何在Docker环境里面运行调试。

后续可以结合谷歌浏览器调试Node.js应用

1为什么 JavaScript 在国外逐渐用于前端+后端开发

为什么 JavaScript 在国外逐渐用于前端+后端开发,而国内还是只用它做前端?

JavaScript 在国外逐渐被用于前端和后端开发的主要原因是因为 Node.js 的出现和普及。Node.js 是一种基于 JavaScript 运行时环境,可以在服务器端运行 JavaScript,从而使得 JavaScript 不仅仅可以用于前端开发,还可以用于后端开发。同时,Node.js 也提供了大量的开发工具和框架,使得使用 JavaScript 进行后端开发变得更加容易和高效。

而在国内,虽然 Node.js 也得到了广泛的应用,但是因为历史原因和技术发展的差异,国内的开发者在很长一段时间内主要使用 JavaPHPPython 等传统的后端开发语言。这些语言在国内的开发者中得到了广泛的应用和推广,从而导致 JavaScript 在国内的后端应用中发展比较缓慢。

此外,由于国内的互联网环境和市场需求不同,国内的开发者更加注重应用的稳定性和可靠性,而不太追求开发效率和创新性。因此,传统的后端开发语言在国内得到了广泛的应用和认可。

还有一个重要的原因是技术环境不同,国内大部分的程序员技术是谋生的技能,而不是一项兴趣爱好,需要考虑更多的因素,没办法沉下心来钻研技术本身。从下图可以看到国外很多流行的全栈式的框架

专注于呈现和服务您的应用程序的框架

Nodejs 如何连接 mongodb?

Mongoose 是一个 Node.js 包,提供了一个使用 mongo 数据库的接口。在应用程序中使用它是非常轻量级的 npm 包。 Mongoose 拥有所有方法集,可以连接和访问存储在 Mongo 数据库中的数据。

1NodeJS 代码审计怎么做?

代码审查(Code Review)是项目开发中常见的流程之一,而这里要跟大家介绍的是代码审计,在区块链里面通常需要对智能合约进行审计已确保合约逻辑的正常。

代码审计(Code Audit)和代码审查(Code Review)虽然都是针对代码的质量评估,但是两者并不是完全相同的概念。

  • 代码审查(Code Review) 是指开发人员在编写代码之后,由其他人员(通常是同事或团队成员)对其代码进行检查和评估,以发现可能存在的错误或潜在的问题。它是一种常规的实践,以确保代码的质量和可读性,以及确保代码符合最佳实践。
  • 代码审计(Code Audit) 是一种更全面的安全评估方法,它是对代码的系统性评估,以发现潜在的漏洞、安全隐患和其他风险。它是一种主要用于评估代码的安全性的方法,其目的是发现任何可能导致安全问题的漏洞和缺陷。

在实践中,代码审查通常是在开发过程中完成的,而代码审计通常是在应用程序发布之前或在代码更改较大时进行的。两种方法都是非常重要的,可以帮助确保代码的质量和安全性,并减少在应用程序中出现潜在问题的风险。

下面是一些可以帮助进行 Node.js 代码审计的步骤:

了解应用程序的架构和设计

在开始代码审计之前,需要对应用程序的架构和设计有一定的了解。这可以帮助更好地理解应用程序的代码结构和组件之间的交互。

确定应用程序的安全需求

在进行代码审计之前,需要明确应用程序的安全需求。这可以帮助了解应用程序中哪些部分可能存在安全漏洞,并优先处理这些漏洞。

熟悉常见的攻击方式和漏洞类型

在进行代码审计之前,需要了解常见的攻击方式和漏洞类型,以帮助更好地识别潜在的安全问题。

代码静态分析

使用代码静态分析工具可以帮助自动化一部分代码审计任务。这些工具可以扫描代码并标识潜在的漏洞和安全问题。

代码动态分析

代码动态分析可以帮助您模拟攻击并测试应用程序的安全性。例如,可以使用漏洞扫描工具来模拟攻击,并识别应用程序中可能存在的漏洞。

审计第三方模块

当使用第三方模块时,这些模块可能包含潜在的漏洞和安全问题。因此,在进行代码审计时,应该审查所有使用的第三方模块,并确保它们是最新的版本,并且没有任何已知的漏洞。

审计数据库和文件系统

数据库和文件系统可能是应用程序中最敏感的组件之一。在进行代码审计时,应该仔细审查与数据库和文件系统交互的代码,并确保所有数据都是安全处理的。

总之,Node.js 代码审计需要仔细的计划和精细的技能。在进行代码审计时,应该始终关注应用程序的安全性,并尽可能地使用各种工具和技术来确保应用程序的安全性。