【H2O2|全栈】Node.js(2)

目录

前言

开篇语

准备工作

npm

概念

常见指令

项目中的包

创建项目

启动项目

服务器搭建

express

基本步骤

搭建应用

创建路由

监听端口

启动服务器

面试相关

结束语


前言

开篇语

本系列博客分享Node.js的相关知识点,本章讲解npm与服务器的简单搭建。

与基础部分的语法相比,ES6的语法进行了一些更加严谨的约束和优化,因此,在之后使用原生JS时,我们应该尽量使用ES6的语法进行代码编写。

准备工作

软件:【参考版本】Visual Studio Code

插件(扩展包):Open in browser, Live Preview, Live Server, Tencent Cloud AI Code Assistant, htmltagwrap

提示:在不熟练的阶段建议关闭AI助手

系统版本: Win10/11

提示:node.js在当前文件夹下使用cmd运行,不在浏览器解析运行

npm

概念

npm,全称为Node Package Manager,是Node.js的管理、分发以及装包工具

我们的Node.js的包都由npm进行管理,并进行依赖控制,方便代码的部署。

常见指令

在下载完npm之后,我们可以在CMD中使用如下的这些常见的命令进行npm的配置——

# 查看包安装的位置

npm root -g

# 查看当前使用的源

npm config get registry

# 通常来说,国外的源会比较慢,所以修改为国内的镜像

npm config set registry http://registry.npm.taobao.org/

# 如果想要使用其他的源,可以先删除当前的源,即恢复默认源

npm config delete registry

如果我们想要使用npm安装全局的包,可以使用下面的命令——

npm install/i 应用@版本号 -g

比如,如果我们想要在全局安装3.1.1版本的jquery,就可以这么写——

npm install/i jquery@3.1.1 -g 

如果不写版本号,则默认安装的是最新版本。 

如果不想要在全局进行安装,则可以使用下面的指令来卸载安装过的包——

npm uninstall 应用 -g

项目中的包

对于一个项目而言,它的包分为内置包外置包两种。

内置包,如path,fs等,它们类似于js中的内置函数,不需要安装就可以直接使用。

而外置包,则需要进入到项目的文件夹下,打开CMD,使用npm i指令安装。

有些包只在开发中使用,但是上线就不使用了,例如 less(less 上线之后编译成 css),sass,babel,nodemon....那么,这些包应当安装在开发环境中。

# 两种开发环境部署指令

npm i/install  包名@版本号 -dev
npm i/install  包名@版本号 -D

而有些包,则在部署上线时仍然需要使用,例如 jquery,bootstarp....那么,这些包应当安装在生产环境部署环境中)。

# 三种生产环境部署指令

npm i/install  包名@版本号
npm i/install  包名@版本号 --save
npm i/install  包名@版本号 -S

与全局中类似,使用下面的命令来删除项目中安装过的包——

npm uninstall 应用

创建项目

首先,找到需要创建项目的文件夹,调出CMD。

在该文件夹中,使用下面的命令来生成默认的配置文件,即package.json文件——

npm init -y

其中-y代表的是所有选项都使用默认选项。

使用VS-Code打开package.json文件,在‘script’中,添加‘dev’‘start’两种键名,值就是需要执行的命令。

比如,如果想要执行index.js文件,就可以使用下面的配置——

"scripts": {

    "dev": "node index",

    "start": "nodemon index",

    "test": "echo \"Error: no test specified\" && exit 1"

}

启动项目

配置完成后,就可以使用npm进行js文件的使用,使用方式为——

npm run  启动的名字(dev,start)

当名字为start时,可以省略run。 

nodemon需要我们手动进行安装,放在开发环境中,它可以让我们在服务器启动时不停机编辑代码,并实时反馈运行状态。 

当然,如果你所在的项目组的其他成员已经为我们提供了package.json配置文件,则直接使用下面的命令将配置里的包全部下载完毕——

npm i

我们下载好的包和相关的依赖,都会存放在node_modules文件夹中, 在共享项目时,由于该文件夹可以由npm i依据package.json自动生成,所以需要我们删去

一个示例的项目结构如下,其中index.js和server.js为用户创建的文件——

在index.js中存在下面的打印语句——

console.log('启动!!!!!!!!!!!!!!!!!!');

console.log('再次启动!!!!!!!!!!!!!!!!');

console.log('所有系统全部启动!!!!!!!!!!!!');

启动测试文件index.js的效果示例——

服务器搭建

express

我们需要通过express包搭建应用和创建路由,所以需要使用npm i命令安装该包,默认安装最新版本即可。

注意,express在项目上线时仍需使用,所以安装在生产环境下。

基本步骤

搭建应用

使用下面的代码导入express包,并使用express()方法搭建应用——

const express= require("express")
const app = express() 

创建路由

在 Web 开发中,“路由” 是指如何响应客户端的请求。

客户端向服务器发送请求(request),服务器向客户端响应(response)

express中,路由的基本结构为——

app.method(path, function)

method是特定的Http请求方式,比如get,post,put和delete。

对于浏览器而言,默认仅支持get方式,如果需要查看其他的请求方式,可以使用Postman等软件进行测试并查看。

path是路由中请求关联的URL,最基础的“/”代表根路径

function是处理指定请求时执行的处理程序。它一般有两个参数——req和res,分别代表请求和响应,通过调用这两个参数下的API,可以完成不同的需求。

常见的req请求对象如下——

对象作用形式

req.cookies

获取cookies信息

req.query

获取url中?后的参数

?key=value&key2=value2

req.params

路径传参

/路由地址/:key/:key2..../:keyn

req.ip获取ip地址
req.path获取ip地址后的路由地址

/路由地址

对于路径传参的方式,传入的key直接写在path中,冒号为占位符(必须要有)。在测试连接时(比如使用浏览器填写地址),直接写value即可。

举个例子,如果path为:

/路由地址/:username/:pwd

那么测试连接的地址为:

http://127.0.0.1:端口/路由地址/admin/123456

常见的res的API为send()和end(),都用于响应数据

在使用req.path时,注意包含了一个/,可能会转为根目录,需要对此进行处理,比如在前面拼接一个“.”转为父目录。

比如,一个简单的get请求如下——

app.get("/",(req,res) => {res.send("你好,欢迎访问!")
})

监听端口

应用使用listen()方法来监听指定的端口,一般来说,最简单的形参列表为——

app.listen(port, function)

port为我们的端口,常使用const定义实参并传入。

合法的端口范围为1~65535,但是1~1024为我们的系统端口,不应当占用,而其余端口可以根据我们的喜好设置(可以查询正在使用中的端口并避免使用这些端口)。

function是监听窗口连接成功时,服务器在控制台执行的反馈程序。 

两个参数之间,还可以传入一个ip地址参数,如果为本地,则该参数为“127.0.0.1”。

下面是一种示例的写法——

app.listen(port, "127.0.0.1", () => {console.log(`服务器启动:http://127.0.0.1:${port}`);   
})

启动服务器

设置完上述内容之后,就可以使用npm run dev或npm start启动服务器,并使用下面的地址访问服务器——

http://127.0.0.1:端口号

我这里使用的是3000端口,启动后的CMD窗口如下——

访问浏览器后可以看到响应的数据——

面试相关

在请求中,有两种风格——非restful风格和restful风格。

对于非restful风格而言,涉及知识点如下——

1. get请求

get 默认请求

参数暴露到url上 不安全

数据传输有限(地址栏数据有限)

不能做上传操作

2. post请求

参数携带在请求体

数据相对安全

数据传输无上限

可以做上传操作

对于restful风格,涉及知识点如下——

含义: 不同的请求方式表达的含义不同的

get       表示 查询检索

post     表示 新增

put       表示 修改操作

delete  表示 删除操作 

结束语

本期内容到此结束。关于本系列的其他博客,可以查看我的JS进阶专栏。

在全栈领域,博主也只不过是一个普通的萌新而已。本系列的博客主要是记录一下自己学习的一些经历,然后把自己领悟到的一些东西总结一下,分享给大家。

文章全篇的操作过程都是笔者亲自操作完成的,一些定义性的文字加入了笔者自己的很多理解在里面,所以仅供参考。如果有说的不对的地方,还请谅解。

==期待与你在下一期博客中再次相遇==

——临期的【H2O2】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/887764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于 Nginx Ingress Controller 的四层(TCP)转发配置

基于 Nginx Ingress Controller 的四层(TCP)转发配置 1. 简介 本指南将展示如何通过配置 ConfigMap 来实现 Nginx Ingress Controller 的四层转发(TCP),并通过配置测试应用程序验证配置的有效性。本文中使用的 Kuber…

生产Redis批量删除数据

生产Redis不能直接删除大量的Key,避免占用主线程阻塞正常业务,因此需要批量多次删除。一下代码经过生成磨炼,可以直接测试使用。 #!/bin/bash# Redis服务器地址 REDIS_HOST"127.0.0.1" # Redis端口 REDIS_PORT6379 # 匹配的键模式…

JDK的版本演化,JDK要收费吗?

Java版本演化历史 Java的版本历史可以追溯到1995年,以下是Java语言自诞生以来的主要版本及其关键特性: 一、早期版本 Java 1.0(1996年1月发布) 引入了Java虚拟机(JVM)和Java应用编程接口(API&…

kafka+zookeeper集群搭建

kafkazookeeper集群搭建 规划 服务ip端口配置kafkazookeeper192.168.138.1512181/9092/2888/38882CPU、2G内存kafkazookeeper192.168.138.1522181/9092/2888/38882CPU、2G内存kafkazookeeper192.168.138.1532181/9092/2888/38882CPU、2G内存 开启端口,关闭selinux firewall…

书生大模型实训营第4期进阶岛第三关:LMDeploy 量化部署进阶实践

书生大模型实训营第4期进阶岛第三关:LMDeploy 量化部署进阶实践 1. 配置 LMDeploy 环境1.1 开发机的创建与环境搭建1.2 模型获取1.3 模型测试 2. InternLM2.5 的部署与量化2.1 LMDeploy API 部署 InternLM2.52.1.1 启动API服务器2.1.2 以命令行形式连接 API 服务器2…

visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具

1.需求:找出图像中的这个图形。 2.步骤 使用CogPMAlignTool工具,该工具是模板匹配工具,见名知意,所谓模板匹配工具就是说先使用该工具对一张图像建立模板,然后用这个模板在其他图像上进行匹配,匹配上了就说…

Z2400027基于Java+SpringBoot+Mysql+thymeleaf引擎的图书馆管理系统的设计与实现 代码 论文

图书馆管理系统的设计与实现 一、项目背景与简介二、系统总体功能三、运行环境与技术选型四、系统架构与模块划分五、系统界面截图六、源码获取 一、项目背景与简介 项目背景: 随着信息技术的不断发展和图书资源的日益丰富,图书馆作为知识传播和学习的重…

GateWay使用手册

好的&#xff0c;下面是优化后的版本。为了提高可读性和规范性&#xff0c;我对内容进行了结构化、简化了部分代码&#xff0c;同时增加了注释说明&#xff0c;便于理解。 1. 引入依赖 在 pom.xml 中添加以下依赖&#xff1a; <dependencies><!-- Spring Cloud Gate…

详谈面试题:Vue、React为什么使用虚拟DOM

虚拟DOM是一种在前端框架中广泛使用的技术&#xff0c;它可以提升开发效率。那么国外流行的框架svelte没有使用虚拟DOM&#xff0c;而是直接操作真实DOM&#xff0c;效率依然很高。为什么Vue和React不采用这种方式呢&#xff1f; 目录 一、框架设计 二、解耦运行环境 三、总…

PHP md5函数 生成的字符串是多少位的

PHP md5() 函数生成的是一个32位的十六进制字符串。 MD5 散列值通常以十六进制数字形式表示&#xff0c;为了保证散列值的唯一性和不可预测性&#xff0c;它们通常由0-9以及a-f的16个字符组成&#xff0c;总共是32个字符。 以下是PHP代码示例&#xff1a; $str "Hello,…

Next.js-样式处理

#题引&#xff1a;我认为跟着官方文档学习不会走歪路 Next.js 支持多种为应用程序添加样式的方法&#xff0c;包括&#xff1a; CSS Modules&#xff1a;创建局部作用域的 CSS 类&#xff0c;避免命名冲突并提高可维护性。全局 CSS&#xff1a;使用简单&#xff0c;对于有传统…

神经网络中的损失函数(Loss Function)

损失函数&#xff08;Loss Function&#xff09;在机器学习和深度学习中扮演着至关重要的角色&#xff0c;它是衡量模型预测值与实际值之间差异程度的函数。通过最小化损失函数&#xff0c;我们可以优化模型的参数&#xff0c;使其预测结果更加准确。 一、损失函数的定义 损失函…

Kong API Gateway 深度解析与实战指南

1. 简介 1.1 什么是Kong API Gateway&#xff1f; Kong 是一款广泛使用的开源 API Gateway 和微服务管理工具&#xff0c;最初由 Mashape&#xff08;现为 Kong Inc.&#xff09;在 2015 年推出。它基于 Nginx 和 OpenResty 构建&#xff0c;旨在为现代应用程序提供高性能、可…

Three.js渲染较大的模型之解决方案

文章目录 Three.js渲染较大的模型 解决方案视锥体剔除实例 和 遮挡剔除 实例视锥体剔除&#xff08;Frustum Culling&#xff09;实例原理概述代码示例解释 遮挡剔除&#xff08;Occlusion Culling&#xff09;实例原理概述代码示例解释 three.js 模型压缩 Three.js渲染较大的模…

AWS账户是否支持区域划分?

在云计算的世界中&#xff0c;亚马逊网络服务&#xff08;AWS&#xff09;凭借其全球化的基础设施和丰富的服务选项受到许多企业和开发者的青睐。一个常见的问题是&#xff1a;AWS账户是否支持区域划分&#xff1f;为了回答这个问题&#xff0c;我们九河云一起深入了解AWS的区域…

鼠标前进后退键改双击,键盘映射(AutoHotkey)

初衷&#xff1a; 1.大部分鼠标为不可自定义按键&#xff0c;可以自定义的又很贵。 鼠标左键是双击是很频类很高的操作&#xff0c;鼠标前进/后退按键个人感觉使用频率很低&#xff0c;因此把鼠标前进/后退改为双击还是很合适的。 2.有些短款的键盘没有Home或End键&#xff0c;…

华为海思2025届校招笔试面试经验分享

目前如果秋招还没有offer的同学&#xff0c;可以赶紧投递下面这些公司&#xff0c;都在补招。争取大家年前就把后端offer拿下。如果大家在准备秋招补录取过程中有任何问题&#xff0c;都可以私信小编&#xff0c;免费提供帮助。如果还有部分准备备战春招的同学&#xff0c;也可…

C语言解决空瓶换水问题:高效算法与实现

标题&#xff1a;C语言解决空瓶换水问题&#xff1a;高效算法与实现 一、问题描述 在一个饮料促销活动中&#xff0c;你可以通过空瓶换水的方式免费获得更多的水&#xff1a;3个空瓶可以换1瓶水。喝完这瓶水后&#xff0c;空瓶会再次变为空瓶。假设你最初拥有一定数量的空瓶&a…

MySQL乐观锁

前言 乐观锁是一种并发控制机制&#xff0c;它假设在大多数情况下不会发生冲突&#xff0c;因此在事务执行过程中不加锁。只有在提交时才会检查数据是否被其他事务修改过。如果数据在此期间被修改了&#xff0c;则当前事务会被回滚或者需要重新执行。乐观锁的主要用途和优势包…

力扣hot100-->前缀和/前缀书/LRU缓存

前缀和 1. 560. 和为 K 的子数组 中等 给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#…