Node
安装
- 去官网nodejs.org/en/下载LTS稳定版
- 单击下好的软件,按提示默认安装
- 安装结束之后通过查看软件版本的方式检查是否安装成功
win+R键输入cmd,打开windows终端,在终端中输入node空格-v指令回车,如果出现下方图片红色圈中的内容,说明安装成功
如果没有显示版本号,说明安装不成功,需重新安装。
终端常用命令
cd 路径地址 #去往指定的目录下
esc # 清除当前已输入的命令
tab # 快速补全文件名
cls命令 #清空终端内容
模块化(Natives modules)
把复杂的问题拆分成多个小的模块,好处就是可以提高代码的复用性、可维护性,并且可以实现按需加载。
- 规范
遵循一定的规则将代码拆分成多个模块
- 加载模块
require()
加载模块需要使用
require()方法,要加载对应的模块只需在require()方法的括号中写入要加载模块的名字或路径即可,例如要加载文件系统模块require('fs'),加载内置模块和第三方模块直接在括号内写模块名字即可,加载自定义模块需要写自定义模块的文件路径例如require(./styles.js)
- 模块作用域
在自定义模块中定义的变量和方法,只能在当前模块下被访问 防止了全局变量污染
- module对象
每个自定义模块中都有一个module对象,里面存储了与当前模块有关的信息
- exports属性
内置模块
nodejs官方提供的模块,在安装node之后就已经存在,内置模块的使用官网中也都有介绍
fs文件处理模块
使用fs模块之前需要先导入该模块
const fs = fs.require('fs')
API
fs.readFile()fs.writteFile()
fs.readFile(path[, options], callback) 读取指定文件内容
const fs = require('fs');
fs.readFile('./one1.txt', 'utf8', (err, data) => {
err ? console.log('读取文件失败') : console.log(data);
// console.log(err); // 如果文件读取成功err将返回null,否则将返回一个错误对象
// console.log(data); // data是读取文件中的内容,成功将会打印在终端,失败则不打印
})
fs.writteFile() 向文件中写入内容
const fs = require('fs');
fs.writeFile('./one1.txt', 'nodejs学完学webpack,最后学框架', 'utf8', err => {
err === null ?
(console.log('写入成功'),
fs.readFile('./one1.txt', 'utf8', (err, data) => {
err ? console.log('读取失败')
: console.log(data);
}))
: console.log('写入失败');
})
例子:
const fs = require('fs');
fs.readFile(__dirname+'/成绩.txt', 'utf8', (err, data) => {
err ?
console.log('读取文件失败' + '\n' + err.message)
: console.log('读取文件成功' + '\n' + data);
const arrold = data.split(' ')
console.log(arrold);
const arr = arrold.map(datas => {
datas = datas + ''
return datas
})
console.log(arr);
let strs = arr.join('\r\n');
console.log(strs);
fs.writeFile(__dirname+'/2成绩.txt', strs, err => {
err ? console.log('成绩写入失败') : console.log('成绩写入成功!');
})
})
__dirname,当前文件所处的目录
path路径处理模块
path.join([...paths]) 路径拼接
const fs = require('fs');
const path = require('path');
// ../ 会抵消前面的路径
const pathstr = path.join('/a', '/b/c', '../', './d', 'e')
console.log(pathstr); // \a\b\d\e
console.log(__dirname);
fs.readFile(path.join(__dirname, '/two.txt'), 'utf8', (err, data) => {
err ? console.log('文件读取失败' + '\n' + err) : console.log('文件读取成功' + '\n' + data);
})
path.basename(path[,ext]) 获取路径文件名
const path = require('path');
const newfile = path.basename(path.join(__dirname, '/two.txt'), '.txt')
console.log(newfile); // two
path.extname(path) 获取文件扩展名
const path = require('path');
const filenew = path.extname(path.join(__dirname, '/two.txt'))
console.log(filenew); // .txt
http服务器模块
http模块用来创建web服务器,通过
http.createServer()方法,可以方便的把一台普通的电脑变成一台web服务器。 服务器和普通电脑区别在于是否安装了web服务器,常用服务器软件有IIS、Apache等 在nodejs中,我们可以基于nodejs提供的http模块,手写一个服务器软件
- 了解服务器
- IP地址
每台计算机都有一个唯一的ip地址,格式一般为“点分十进制”(1.2.3.4)这种形式呈现,取值范围在0~255的整数,例如 192.168.0.1
- 域名&域名服务器
为了使网站地址更直观更方便记忆,后来又发明了一套字符类型的地址,叫做域名。例如:www.baidu.com 每一个域名都对应一个ip地址,它们之间的对应关系被存放在域名服务器(DNS)中。域名服务器的作用就是将用户输入的域名地址转换成对应的ip地址(域名转换)。 开发测试专用ip地址(127.0.0.1)和域名(localhost),代表我们自己的电脑
- 端口号
每个web服务都对应一个唯一的端口号,web服务器通过判断端口号找到对应的web服务进行处理。现实中80端口可以被省略。
- 创建web服务器
- 导入http模块
const http = require('http')
const http = require('http');
- 创建web服务器实例,通过
http.createServer()方法
const http = require('http');
const server = http.createServer();
- 给服务器绑定request事件
const http = require('http');
const server = http.createServer();
server.on('request', (req,res) => {
const str = `Your request url is ${req.url} and your request method is ${req.method}`
res.end(str);
})
// req.url是服务器访问的地址路径,req.method是地址调用的请求方法,res.end()方法是将str内容响应到客户端
- 启动服务器
const http = require('http');
const server = http.createServer();
server.on('request', (req,res) => {
const str = `Your request url is ${req.url} and your request method is ${req.method}`
res.end(str);
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1');
})
// 在控制台中执行该文件,执行成功会打印“server running at http://127.0.0.1”这句话,
// 通过按住ctrl键,并且鼠标左键单击ip地址(http://127.0.0.1),浏览器就会弹出页面,并且展示str中的内容
- 解决中文乱码问题
const http = require('http');
const server = http.createServer();
server.on('request', (req, res) => {
const str = `您请求的 URL 地址是${req.url},请求的 method 类型是 ${req.method}`;
res.setHeader('Content-Type', 'text/html; charset=utf-8');// 解决中文乱码问题,固定写法,不加这句中文会解析成乱码
res.end(str);
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1');
})
- 根据不同的url响应不同的html内容
const http = require('http');
const server = http.createServer();
server.on('request', (req, res) => {
// 1. 获取url地址
const url = req.url
// 3. 设置默认响应内容 404 Not found
let content = '404 Not found';
// 4. 判断请求的是哪个页面
if (url === '/' || url === '/index.html') {
content = '<h1>首页</h1>'
} else if (url === '/about.html') {
content = '<h1>关于页面</h1>'
}
// 5. 设置响应头`Content-Type`, 防止中文乱码
res.setHeader('Content-Type', 'text/html;charset=utf-8')
// 6. 把内容响应给客户端
res.end(content);
})
server.listen(8080, () => {
console.log('server running at http://127.0.0.1:8080');
})
- 将真实的文件路径提供给服务器
const http = require('http');
const fs = require('fs');
const path = require('path');
const server = http.createServer();
server.on('request', (req, res) => {
const url = req.url
let fpath = '' // 定义一个空的变量
if (url === '/') {
// 如果url地址为'/',给fpath赋值,指定文件路径
fpath = path.join(__dirname, '/shizhong.html')
} else {
// 否则,指定fpath值为默认url路径
fpath = path.join(__dirname, url)
}
// 读取fpath路径下的文件内容
fs.readFile(fpath, 'utf8', (err, data) => {
if (err) {
// 如果fpath路径下的文件内容读取失败,重新定义一个变量,值为404.html文件的路径地址
const errpath = path.join(__dirname, '/404.html')
// 读取404.html文件的内容
fs.readFile(errpath, 'utf8', (err, data) => {
// 如果读取失败,则响应客户端‘404 Not found’,成功则响应404文件内容
err ? res.end('404 Not found') : res.end(data)
})
} else {
//fpath路径下的文件内容读取成功,将内容响应给客户端
res.end(data)
}
})
})
server.listen(80, () => {
console.log('server running at http://127.0.0.1');
})
自定义模块
用户创建的js文件都属于自定义模块
模块化规范CommonJS规范
第三方模块
由第三方开发的模块,使用前需先下载
包
npm包
Express(基于http模块封装出来的)
路由
中间件
next参数 app.use()全局生效中间件 局部中间件
- 中间件的分类
- 应用级别中间件
- 路由级别中间件
- 错误级别中间件
- express.static
- express.json
- express.urlencoded
- 自定义中间件
编写接口
- 创建服务器
- 创建API路由模块
- 编写get接口
- 编写post接口
- CORS中间件解决接口跨域
数据库
web开发模式
- 服务器端渲染模式
- 前后端分离模式