Node — 第二天

http模块

搭建服务器的步骤

① 导入 http 模块

② 创建 web 服务器实例

③ 为服务器实例绑定 request 事件,监听客户端的请求

④ 启动服务器

// ① 导入 http 模块
const http = require('http');// ② 创建 web 服务器实例
const server = http.createServer();// ③ 为服务器实例绑定 request 事件,监听客户端的请求
// server.on('事件名称', 处理函数);// 只要客户端发来请求,则会触发下面的事件
server.on('request', function () {console.log('你的请求我收到了');
});// ④ 启动服务器 
server.listen(3000, function () {// 服务器启动之后,会触发这个回调函数console.log('my first web server start~');
});

测试:

  • node执行你的JS代码
  • 打开客户端(浏览器、postman),向服务器发送请求(localhost:3000)
  • 查看,代码中的请求事件,是否触发了,如果触发了,表示请求成功了

使用http搭建服务器的问题

  • 代码如果更改了,则需要重新启动服务器,你的代码才会生效

    • Ctrl + C , 先终止服务
    • 再次执行 node xxx.js 重新启动服务即可
  • vscode 终端的使用问题

    在这里插入图片描述

URL的组成

http://www.xxxx.com:3000/yyy/zzz?id=123

  • 协议
    • http
    • https
  • 主机地址(找到服务器)
    • 指向服务器的域名,(localhost 永远指向自己的计算机)
    • 服务器的IP地址 (127.0.0.1 永远指向自己的计算机)
  • 端口
    • 作用是区分服务器上的每个服务的
    • 可以通过 netstat -an 查看已经被占用的端口
  • 文件路径部分(/api/getbooks index.html /a/b/c/xxx.html)
  • 查询字符串部分(GET请求的参数)

获取请求相关的信息

server.on('request',  function (req) {// req 对象,是根据 http.IncomingMessage类得来的对象// 通过这个对象,我们可以得到请求的相关信息req.url // 表示请求的urlreq.method // 表示请求方式req.headers // 表示请求头
})

得到请求相关的信息之后,方便服务器做出判断

服务器做出响应

server.on('request',  function (req, res) {// 所有和请求相关的信息,都是通过req对象获取的// 所有和响应相关的信息,都通过res来完成。res这里是response的意思。// console.log(res instanceof http.ServerResponse); // true// res.end(); // 用于做出响应// res.setHeader(name, value); // 设置响应头// res.statusCode // 设置响应状态码// res.writeHead(状态码, {响应头})// 告诉浏览器,响应的数据是什么类型、什么编码// res.setHeader('Content-Type', 'text/html; charset=utf-8');// res.statusCode = 404; // 随便设置的状态码,实际中应该是200res.writeHead(200, {// key: value'Content-Type': 'text/html; charset=utf-8','Author': 'LaoTang', // 随便写的,实验一下。值不能用中文});res.end('你好浏览器,你的请求我收到了,这是给你的回应');
})

GET方式的接口

  • 提供数据给客户端(终极目标)

  • 具体的获取书籍的接口

    • 读取books.json里面的内容
      • fs.readFile() — 读取的结果是json格式
      • require() — 读取的结果是array格式
    • 把读取的结果响应给客户端 — 响应的结果,必须是json字符串格式
    • 遇到的问题
      • 解决跨域的问题 – 设置响应头
      • 解决编码的问题 – 设置响应头

POST方式的接口

  • 接收并保存数据(终极目标)
  • 如何接收POST请求体
    • 定义空字符串,比如str
    • 注册req的data事件,用于接收客户端提交的数据
    • 注册req的end事件,当完全接收到了客户端提交的数据,会触发这个事件
  • 保存数据
  • 做出响应
// 加载所需的模块
const fs = require('fs');
const path = require('path');
const querystring = require('querystring');
// 搭建服务器
const http = require('http');
const server = http.createServer();
server.listen(3006, () => console.log('图书管理案例接口服务启动了'));server.on('request', (req, res) => {// 客户端都会发送什么类型的请求,请求的url又是什么let method = req.method; // 获取请求方式let url = req.url; // 获取请求的url// 定义书籍 books.json的绝对路径let filename = path.join(__dirname, 'books.json');// 判断,请求的是否是获取图书的接口if (method === 'GET' && url === '/api/getbooks') {// 说明客户端请求的就是获取书籍的接口// 把所有书籍信息响应给客户端// 读取books.json里面的内容,把读取的结果响应给客户端// 读取json文件,可以直接使用 require let data = require(filename);// console.log(data); // 得到一个数组res.writeHead(200, {'Access-Control-Allow-Origin': '*', // 解决跨域问题'Content-Type': 'application/json; charset=utf-8'});res.end(JSON.stringify({status: 200,msg: '获取图书成功',data: data}));} else if (method === 'POST' && url === '/api/addbook') {// 说明请求的是添加图书的接口// console.log(111);// 1. 接收客户端提交的数据// 1.1 定义一个空字符串,一会要把接收到的数据拼接到空字符串中let str = '';// 1.2 注册req的data事件,用于接收客户端提交的数据// 当接收到客户端的提交的数据的时候,就会触发这个事件,形参chunk就是接收到一部分数据req.on('data', (chunk) => {str += chunk;});// 1.3 注册req的end事件,当完全接收到了客户端的数据之后,会触发req.on('end', () => {// console.log(str); // 完整的数据 // bookname=aaa&author=bbb&publisher=ccc// 2. 保存到 books.json中let old = require(filename); // 得到数组let newBook = querystring.parse(str);newBook.id = Date.now(); // 临时使用时间戳当做idold.push(newBook);fs.writeFile(filename, JSON.stringify(old), (err) => {if (err) return console.log(err);// 没有错误,保存成功// 3. 做出响应res.writeHead(200, {'Access-Control-Allow-Origin': '*', // 解决跨域问题'Content-Type': 'application/json; charset=utf-8'});res.end(JSON.stringify({status: 201,msg: '添加图书成功',}));});});} else {res.end('错误');// 说明客户端代码写错了。客户端请求了一个不存在的资源}
});

npm初步使用

介绍

npm(node package manager)node包管理器。

包是什么?包就是模块。

npm这个工具,在安装node的时候,就已经安装到你的计算机中了。

命令行中执行: npm -v ,如果看到版本号,说明安装成功了。

作用

npm的作用是:管理node模块的工具。

  • 下载并安装第三方的模块
  • 卸载第三方模块
  • 发布模块
  • 删除已发布的模块

第三方模块:

  • 非内置模块,安装完node,还不能使用的模块,需要从网上下载安装,才能使用的模块
  • 第三方模块是个人、公司、组织编写的模块,发布到网上,供我们使用

npm 就是一个管理(下载安装、卸载…)第三方模块的工具

初始化

使用npm工具之前,必须先初始化。

npm init -y
# 或
npm init
# 然后一路回车

初始化之后,会在项目目录中生成 package.json 的文件。

什么第三方模块

非node自带的模块。

是别人写的模块,然后发布到npm网站,我们可以使用npm工具来下载安装别人写的模块。

第三方模块,都是在node核心模块的基础之上,封装了一下,实现了很多非常方便快速简洁的方法。

目前,npm网站收录了超过 150万个第三方模块。

安装卸载项目模块

下载安装第三方模块

npm install 模块名
npm i 模块名

卸载模块

npm uninstall 模块名
npm un 模块名

关于项目模块的说明

  • 下载安装的模块,存放在当前文件夹的 node_modules 文件夹中,同时还会生成一个记录下载的文件 package-lock.json
  • 下载的模块,在哪里可以使用
    • 在当前文件夹
    • 在当前文件夹的子文件夹
    • 在当前文件夹的子文件夹的子文件夹
  • 怎样使用第三方模块
    • 和使用内置模块一样,需要使用 require 加载模块
    • 调用模块提供的方法完成工作(一般好的模块都会用使用文档的)

演示下载安装第三方模块:moment

这里演示一个处理时间日期的模块 – moment

下载安装moment模块

npm init -y
npm i moment

演示使用moment模块处理时间

// 加载模块
const moment = require('moment');console.log(moment().format('YYYY-MM-DD hh:mm:ss'));
// 官网:http://momentjs.cn

全局模块

  • 全局安装的模块,不能通过 require() 加载使用。

  • 全局安装的模块,一般都是命令或者工具。

  • 安装方法,在安装模块的命令后面,加 -g

    npm i 模块名 -g
    # 或
    npm i -g 模块名
    
  • 卸载方法(也是多一个 -g

    npm un 模块名 -g
    
  • 全局安装的模块,在系统盘(C盘)

    • 通过命令 npm root -g 可以查看全局安装路径

mac安装过程可能出现权限问题,可以使用 sudo npm i xxx -g

全局安装nodemon模块

  • 安装命令

    npm i nodemon -g
    
  • nodemon的作用:

  • 代替node命令,启动服务的,当更改代码之后,nodemon会自动帮我们重启服务。

  • 运行nodemon,如果报错如下:
    在这里插入图片描述

  • 解决办法是:

    • 管理员方式,打开命令行窗口
    • 执行 set-ExecutionPolicy RemoteSigned;
    • 在出现的选项中,输入 A,回车。即可

更改镜像源

镜像源,就是下载安装第三方模块的网站。

我们下载的第三方模块都是从国外的npm主站下载的,速度比较慢。

淘宝在国内对npm上的第三方模块做了一个备份,也就是说,我们可以从国内下载第三方模块。

除了淘宝之外,还有很多其他镜像源。

简单的更改镜像源方法:

  • 全局安装 nrm 的模块
  • npm i nrm -g
    • nrm 用于管理镜像源
  • 使用nrm
    • nrm ls 通过这个命令,可以查看可用的镜像源
    • nrm use taobao ,切换下载模块的网站为淘宝
      在这里插入图片描述

注意 :如果 nrm 安装失败,请修改电脑的环境变量,给环境变量添加上 npm 的绝对地址,再次查询即可

查询版本

nrm - y

在这里插入图片描述

使用已下nmp 代码可以根据 package.json重新安装node_modules中的模块信息

npm  i

如果安装出现错误:
1. 查看 npm 版本
2. 镜像源的配置

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

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

相关文章

TCP/IP(五):TCP 协议详解

上一节 中讲过,TCP 协议是面向有连接的协议,它具有丢包重发和流量控制的功能,这是它区别于 UDP 协议最大的特点。本文就主要讨论这两个功能。 数据包重发 数据发送 丢包重发的前提是发送方能够知道接收方是否成功的接收了消息。所以&#…

TCP/IP(六):HTTP 与 HTTPS 简介

本文是准备面试过程中网络部分总结整理的最后一篇文章,主要介绍以下知识: HTTP 协议概述POST 请求和 GET 请求Cookie 和 Session数据传输时的加密HTTPS 简介 HTTP 协议 在 OSI 七层模型中,HTTP 协议位于最顶层的应用层中。通过浏览器访问网…

Node — 第三天

模块化 什么是模块化 模块化是指解决一个复杂问题时,自顶向下逐层把系统划分成若干模块的过程。 对于整个系统来说,模块是可组合、分解和更换的单元。 生活中的模块化 编程中的模块化 编程领域中的模块化,就是遵守固定的规则,…

FireDAC 中文字段过滤问题

当使用 FireDAC Filter 过滤数据的时候,通常这样写: FDMemTable.Filtered : False; FDMemTable1.Filter : 姓名 string(edtFilter.Text).QuotedString; FDMemTable.Filtered : True; 将会报错:[FireDAC][Stan][Eval]-107. Invalid characte…

Express — 使用步骤

Express Express 介绍安装搭建服务器的步骤express提供的新方法GET接口 获取GET中的请求参数 POST接口 获取POST请求提交的数据 中间件原理中间件语法中间件初体验(设置响应头)中间件开放静态资源中间件接收POST请求体中间件返回404页面 express 介绍 E…

大模型工具_Langchain-Chatchat

https://github.com/chatchat-space/Langchain-Chatchat 原Langchain-ChatGLM 1 功能 整体功能,想解决什么问题 基于 Langchain 与 ChatGLM 等LLM模型,搭建一套针对中文场景与开源模型,界面友好、可离线运行的知识库问答解决方案。 当前解决…

iOS 键盘风格详解UIKeyboardType

一、键盘风格 UIKit框架支持8种风格键盘。 [java] view plaincopy print?typedef enum { UIKeyboardTypeDefault, // 默认键盘:支持所有字符 UIKeyboardTypeASCIICapable, // 支持ASCII的默认键盘 UIKeyboardTypeNu…

Node — 第四天(Promise与路由)

Promise - ES6新对象 Promise能够处理异步程序。 回调地狱 JS中或node中,都大量的使用了回调函数进行异步操作,而异步操作什么时候返回结果是不可控的,如果我们希望几个异步请求按照顺序来执行,那么就需要将这些异步操作嵌套起来…

winform datagridview控件使用

最近做项目时&#xff0c;显示查询结果总需要绑定到datagridview控件上显示&#xff0c;总结了给datagridview绑定数据的方式&#xff0c;以及导出datagridview数据到excel表格&#xff0c;如有错误请多指教 1.直接绑定数据源&#xff0c;可以绑定的数据格式有List<T>,Da…

Node — 第五天

1. MySQL数据库 phpstudy 数据库服务器及图形化软件 软件链接 链接&#xff1a;https://pan.baidu.com/s/1F8wdoMstHAJkINfDKDejsw 提取码&#xff1a;xl3k 数据库对于我们前端同学来说&#xff0c;就是一个了解。 对于不会变化的数据&#xff08;省、市、县&#xff09;&…

iOS10 权限访问崩溃

手机升级了 iOS10 Beta&#xff0c;然后用正在开发的项目 装了个ipa包&#xff0c;发现点击有关 权限访问 直接Crash了&#xff0c;并在控制台输出了一些信息&#xff1a; This app has crashed because it attempted to access privacy-sensitive data without a usage descr…

Node — 第六天(前后端分离)及(身份验证)

综合应用服务端知识点搭建项目 下载安装所需的第三方模块 npm init -y npm i express cors mysql # express 用于搭建服务器 # cors 用于解决跨域 # mysql 用于操作数据库# 后面用到什么&#xff0c;再下载创建app.js 之前&#xff0c;我们开启一个服务器&#xff0c;js文件…

继承上机作业

1、实现如下类之间的继承关系&#xff0c;并编写Music类来测试这些类 2、编写一个Java应用程序&#xff0c;该程序包括3个类&#xff1a;Monkey类、People类和主类E。要求&#xff1a; (1) Monkey类中有个构造方法&#xff1a;Monkey (String s)&#xff0c;并且有个public voi…

ApplePay集成教程

Apple Pay运行环境&#xff1a;iPhone6以上设备&#xff0c;操作系统最低iOS9.0以上&#xff0c;部分信息设置需要iOS9.2以上。目前还不支持企业证书添加。 环境搭建好后可以在模拟器上面运行&#xff0c;xcode7.2.1iPhone6SP9.2系统下&#xff0c;系统会绑定几种虚拟的银行卡…

Node — 第七天 (大事件项目接口实现一)

关于JS错误处理 node中和mysql中的错误处理 node和MySQL提供的方法&#xff0c;已经对错误信息进行了封装&#xff0c;只需要使用 err.message 即可获取到错误信息。 比如&#xff1a; const fs require(fs); // 读取一个不存在的文件 fs.readFile(abcd.txt, (err, data) …

1.Consul 简介和环境搭建

1.什么是 Consul Consul 是 service mesh(服务网格)的一个解决方案&#xff0c;它提供了诸如服务发现&#xff0c;配置和隔离等功能的一整套控制平面(control plane)。开发人员可以根据需要单独使用这些功能点&#xff0c;也可以将他们整合成为一个完整的service mesh。Consul …

Node — 第八天 (大事件项目接口实现二)

如何处理MySQL的错误 MySQL的错误信息&#xff0c;可以通过err来获取。这是没有问题的。 但是&#xff0c;我们加入了Promise&#xff0c;Promise中的错误&#xff0c;在外部是获取不到的&#xff0c;只能使用Promise相关方法来获取错误信息。 解决方法一 使用 JS原生的 tr…

在local模式下的spark程序打包到集群上运行

一、前期准备 前期的环境准备&#xff0c;在Linux系统下要有Hadoop系统&#xff0c;spark伪分布式或者分布式&#xff0c;具体的教程可以查阅我的这两篇博客&#xff1a; Hadoop2.0伪分布式平台环境搭建 Spark2.4.0伪分布式环境搭建 然后在spark伪分布式的环境下必须出现如下八…

APS系统对制造企业到底有多重要?看完这5点你就明白了

第一个问题&#xff1a;需要APS吗&#xff1f; APS是否重要&#xff0c;不能从其所体现的软件工具或系统角度来说&#xff0c;而应该从业务角度来说。对于制造工厂和车间的运行而言&#xff0c;计划是核心的业务。就如同那句俗话说的&#xff0c;没有规矩不成方圆&#xff0c;领…

Node — 第九天 (大事件项目接口实现三)

文章管理接口 设计数据表 添加文章接口 编写接口&#xff0c;使用postman模拟提交formdata类型的数据 在article.js 中&#xff0c;加入 /add 路由 postman模拟提交formdata类型的数据 multer处理文件上传 下载安装multer 加载模块 const multer require(multer) 配置上…