例子:注册
注意:
了解服务器
什么是服务器?
+ 就是一台在网络“那一头”的一台电脑
+ 只不过运行了一些特殊的环境
+ 运行了一些特殊的“软件”
服务器作用
服务器的作用
例子:http://www.baidu.com:80/
上面是一个地址,能看到百度的首页
http => 传输协议
www.baidu.com => 域名(是ip地址的高辨识度的名字)
80 => 端口号(理解为一个软件的门牌号码)
就是找到对应的这台电脑上的那个服务器软件
能找到这个软件,就能找到这个软件开放的那个文件夹(服务器空间)
如果百度提前在这个文件夹里面放好了一个html页面
我们就能看到这个页面了
过一过
域名找到对应的电脑
端口号找到这台电脑上的某一个软件(也就是找到了服务器空间)
如果这个服务器空间里面有页面,那么我们就能看到了
如果这个服务器空间里面有一个叫做index.html的文件
了解
安装node
- 当js运行在node环境下的时候
- 不能操作BOM,不能操作DOM,能操作文件,数据库之类的内容
安装步骤
安装好以后
实际上就是在命令行(终端)运行js代码
有两指令方式
方式一:
方式二:
什么是 node
这个是 node 官网的解释
前端 javascript
后端 javascript (node)
也就是说,node 我们不需要解决兼容问题,不需要 DOM 和 BOM,只关注业务逻辑就可以了
require()导入在 node 里面,我们使用 require 来导入一个文件
// 我是 index.js 文件
require('./a.js')
console.log('我是 index.js 文件')
当我在命令行运行 index.js 文件的时候
a.js 文件运行一遍也可以再导入的时候接受另一个文件导出的内容
// a 接受到的内容就是 a.js 这个文件导出的内容
// 如果 a.js 文件中什么都没有导出,那么接受到的就是一个 空对象
const a = require('./a.js')
exports.导出我们在写一个 js 文件的时候,可以向外导出一些内容
将来在这个文件被导入的时候,就可以接受到一些内容
// 我是 a.js
// 每一个 js 文件都会有一个对象叫做 module
// 在 module 里面有一个成员,叫做 exports
// 每一个 js 文件会默认把 module.exports 导出
// 也就是说,我们向 module.exports 中添加什么内容
// 那么就会导出什么内容
module.exports.name = 'Jack'
module.exports.age = 18
将来这个文件被导入的时候,接受到的内容就是一个对象,里面有两个成员
// 我是 index.js
const a = require('./a.js')
console.log(a) // { name: 'Jack', age: 18 }
path解析本地文件路径join()链接路径片段将所有给定的本地文件路径片段链接在一起
规范化生产的路径
语法:path.join(‘/目录1’,‘目录2’,‘目录3/目录4’,‘目录5’,‘…’)
返回值:‘/目录1/目录2/目录3/目录4’
path.join()拼接的时候是相对路径,拼接好也是相对路径
path.join()拼接的时候是绝对路径,拼接好也是绝对路径
// 1 path.join()
console.log(path.join('./','..','其他资料/复习.md')); // 我们用path的join方法生产的规范路径
// console.log('../其他资料/复习.md');// 我们自己用字符串写的符合window操作系统规范的路径
resolve()拼接绝对路径使用同 path.join()
区别:path.resolve()拼接好以后都是绝对路径
// 2 path.resolve()
console.log(path.resolve('./','..','其他资料/复习.md'));
url解析url网络路径parse()解析成对象format()合并成字符串resolve()合并两段urlFS操作文件fs 是 node 的一个内置模块
专门用来操作文件的
使用的时候直接导入就可以使用了
const fs = require('fs')
// 接下来就可以使用 fs 这个变量去操作文件了
readFile()异步读取异步的读取某一个文件内的内容
const fs = require('fs')
// 因为是异步读取,所以要在回调函数里面获取结果
fs.readFile('./text.txt', 'utf8', function (err, data) {
// err 表示读取的时候出现的错误
// data 表示读取到的内容,如果出现错误,那么是 data 是没有内容的
})
readFileSync()同步读取同步读取某一个文件的内容
const fs = require('fs')
// 因为是同步读取,所以直接以返回值的形式接收读取的内容就可以
const res = fs.readFileSync('./text.txt', 'utf8')
// 同步读取的时候,如果出错会直接在控制台报错,并中断程序继续执行
// 如果没有错误,res 就会得到文件中的内容
writeFile()异步写入异步的向某一个文件中写入内容
const fs = require('fs')
// 写入内容的时候,一般不会出现错误
// 因为如果没有这个文件的话,会创建一个这个文件在向里面写入内容
// 所以回调函数一般没什么用处,只不过是在写入文件结束后做些事情而已
// 虽然没有用处,但是必须要写
fs.writeFile('./text.txt', '我是要写入的内容', function () {
console.log('写入完成')
})
writeFileSync()同步写同步的向某一个文件内写入内容
const fs = require('fs')
// 因为是写入文件
// 没有返回值,因为一般都会写入成功
fs.writeFileSync('./text.txt', '我是要写入的内容')
http开启服务、发送请求node的内置模块有一个http模块
const http = require('http')
// 接下来就可以使用 http 这个模块去开启服务了
http模块里面创建服务的方法
上面的代码写好以后,当你在终端运行这个文件的时候
// 0 导入http模块
const http = require('http');
const url = require('url')
// 1 创建一个服务
const server = http.createServer(function(req,res){
// 这个函数是前端的每一个发送到后端的http请求都会触发的函数
// console.log('有一个请求发送到8080端口了')
// 这个函数接收两个形参
// 第一个形参: req(request) => 这个对象是请求信息
// req.url 表示本次请求的地址
console.log("本次请求的url是:"+req.url)
let urlObj = url.parse(req.url,true);// 解析url字符串为一个对象
console.log("本次请求的查询字符串是:")
console.log(urlObj.query)
console.log("本次请求的路由是:")
console.log(urlObj.pathname)
// 第二个形参: res(response) => 这个对象是响应信息
// res.end() 表示本次响应的内容,()里面写buffer或者字符串
// res.setHeader() 表示本次响应的响应头
// 发送请求之前设置响应头
res.setHeader('content-type','text/html;charset=utf-8');
res.end("我是后端返回的响应主体,内容:hello world",'utf-8')
})
// 2 监听一个端口
// 端口号 0-65535
// 0-1023 不推荐使用
server.listen(8080,function(){
console.log('监听8080端口成功')
})
createServer()创建服务要开启先要创建一个服务
const http = require('http')
// 创建一个服务
// 这个服务默认监听 http 协议
// 这个服务默认监听 localhost 域名
// 返回值就是这个服务
const server = http.createServer(function (request, response) {
// 前端发来的每一个请求都会触发这个函数
// request 包含着所有的请求信息
// response 是所有的响应信息
})
### 4.2`listen()`监听一个端口
- 确定这个服务监听哪一个端口
```javascript
const http = require('http')
// 创建一个服务
const server = http.createServer(function (request, response) {
// 前端发来的每一个请求都会触发这个函数
})
server.listen(8080, function () {
// 这个函数会在服务开启成功以后执行
console.log('listening on port 8080')
})
end()给出一个响应简单给出一个响应
const http = require('http')
// 创建一个服务
const server = http.createServer(function (request, response) {
// 前端发来的每一个请求都会触发这个函数
// 接受到请求以后给出一个响应
response.end('hello world')
})
server.listen(8080, function () {
// 这个函数会在服务开启成功以后执行
console.log('lintening on port 8080')
})
此时,打开浏览器
地址栏输入 localhost:8080
浏览器就会响应文字 hello world
// 在这个文件里面定义一个模块,里面都是操作数字的方法
function add(){
console.log("我是a模块里面的add方法")
}
function cut(){
console.log("我是a模块里面的cut方法")
}
// 要把模块里面的方法导出别人才能通过导入来使用
// 每个js文件都是一个独立的模块
// 每个js文件天生自带一个变量叫做module,是一个对象
// 每个module里面有一个成员叫做exports,是一个对象
// 这个module.exports就是这个文件向外到处的内容,默认是一个空对象
// 我们把想要向外暴露的内容添加到这个对象里面就可以了
module.exports.a = 100
module.exports.add = add;
npm包管理器在我们安装 node 的环境的时候,会自动帮我们一起安装一个 npm 环境
就好像我们安装一些软件的时候,会自动在帮我们安装一些什么 xxx软件管家/xxx游戏 之类的东西
但是 npm 不是垃圾软件,而是一个我们超级实用的工具
和检测 node 一样
在命令行输入指令
$ npm -v
能够得到一个版本号就可以了
npm插件/库/框架 的超市jQuery-validation 插件
bootstrap
npm打开命令行
输入下载的指令
# 表示使用 npm 这个工具下载一个 jquery
$ npm install jquery
下载完毕以后,就会在当前目录下多出一个文件夹
node_modulesjquerynpm 的下载默认是下载最新版本的包
我们也可以在下载的时候指定一下我要下载哪一个版本
# 表示使用 npm 这个工具下载一个 3.3.7 版本的 jquery
$ npm install bootstrap@3.3.7
在删除包的时候,我们可以直接去 node_modules 文件夹中找到对应的包的文件夹删除掉
但是这样做并不好,我们还是应该使用命令行的指令来删除包
# 表示我要删除 jquery 这个包
$ npm uninstall jquery
这样,这个包就会被卸载了
我们的每一个项目都有可能需要依赖很多的包(有插件/库/框架)
npm 会帮助我们记录,我们当前这个项目所使用的包
但是前提是,你要告诉 npm 说: “你来帮我管理整个文件夹”
我们依旧是使用指令在命令行来告诉 npm
# 表示告诉 npm 你来帮我们管理整个文件夹(也就是我的整个项目)
$ npm init
有的时候,有些包下载到一半,因为各种原因失败了(比如突然没有网了)
那么这个下载了一半的包 有可能 会被缓存下来
那么以后你再次下载的时候,就都是失败的状态
那么我们就要清除掉缓存以后,在重新下载
# 表示清除 npm 的缓存
$ npm cache clear -f
nrm切换镜像源工具npm 虽然好用nrm 就是一个用来切换 npm 下载地址的工具(切换镜像源工具)nrmnrm 如果想使用,那么需要我们自己安装一下
因为是我们的工具,所以使用 npm 就可以安装
依旧是使用指令的方式来进行安装
只不过这里要把这个 nrm 安装成一个全局的依赖,而不再是项目内部的依赖了
我们使用指令安装一个全局 nrm
# 表示安装一个全局 nrm
$ npm install --global nrm
$ npm i -g nrm
安装完毕之后,我们检测一下是否安装成功
和检测 node npm 的时候一样
在命令行使用指令查看一下版本号
$ nrm --version
能出现版本号,表示安装成功
nrmnrm 里面存着好几个镜像源地址
我们要挑一个比较快的使用
$ nrm test
我们直接在命令行使用指令来查看所有镜像源地址的网速
# 表示查看 nrm 镜像源地址网速
$ nrm test
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ths3iZ0F-1672412216737)(C:\Users\JReal\AppData\Roaming\Typora\typora-user-images\image-20220919191622833.png)]
我们检测完毕以后,就直到哪个比较快了
我们就使用指令切换一下镜像源地址就好了
nrm use 镜像源名称
# 表示切换到 taobao 镜像源地址
$ nrm use taobao
注意:
nrm切换完镜像以后就没有用了,你可以卸载nrm
$ npm uninstall nrm -g
nrm切换完镜像以后,还是使用npm下载包
npm install 包名