Node.js
2021-03-19 08:09:02 0 举报
AI智能生成
Node.JS入门,包括原生http服务器的启动配置、Express服务器、Node操作MongoDB数据库、中间件知识、第三方Npm包的使用、异步编程相关知识以及简单的后端渲染页面
作者其他创作
大纲/内容
简介
什么是node.js
它既不是一门语言,也不是框架,它是一个平台
node.js是JavaScript的运行平台
node.js为JavaScript运行时
世界上最大的开源生态系统
node.js中的JS
EcmaScript
没有dom和bom
在JavaScript执行环境中为JavaScript提供一些服务器级别的API
与ChromeV8引擎的关系
V8引擎垃圾回收机制
特性
envent-driven 事件驱动
non-blocking I/O mode 非阻塞I/O模型(异步)
ightweight and efficent. 轻量和高效
作用
web服务器后台
npm(node)
git(c语言)
hexo(node)
初识
下载
安装(环境配置)
检测
模块系统
模块化
文件作用域
模块是独立的,在不同的文件使用必须要重新引用
在node中没有全局作用域,它是文件模块作用域
通信规则
- 加载: require
- 导出: exports
标准以及支持
- Node 中的 CommonJS
- 浏览器中的:
- AMD require.js
- CMD sea.js
- es6中增加了官方支持
模块类型
核心模块
第三方模块
必须通过npm下载来引用
加载过程(art-template为例)
1. 先找到当前项目路径的node_modules
2. node-modules/art-template
3. node-modules/art-template/package.json
4. 找到说明文件中的main属性
- main属性记录art-template的入口模块
5. 加载使用这个第三方包
- 实际加载的还是index.js文件
6. 若,package.json或main指定的入口模块不存在则node会找该目录下的index.js文件
7. 条件均不满足则自动往上一级目录查找
自建模块
模块标识
./ 相对于当前路径(在文件操作中可省略)
/ 在当前模块所处的磁盘根目录
JS模块规范
- 模块作用域
- 使用require方法来加载模块
若调用非核心模块和第三方模块,必须加上相对路径`./`,可以省略后缀名
作用
- 加载文件模块并执行里面的代码
- 拿到被加载文件模块导出的接口对象
方式
require()
加载node模块
加载规则
优先从缓存加载(即不会重复调用同个模块中的函数)
- 使用exports接口对象来导出模板中的成员
导出方法
方法一
方法二
导出单个成员
module.exports = 'hello';
内置模块
fs
读取文件
readFile
写入文件
writeFile
http
ip和端口号
服务器
启动服务器
1. 加载http模块
2. 创建web服务对象
3. 监听(注册)request事件
4. 绑定端口号,启动服务
`request`请求事件处理函数
server.on('request', function (request,response) {
//具体实现
}
//具体实现
}
path
路径操作模块
基本操作
- path.basename(path[, ext]):获取路径的文件名,默认包含扩展名
- path.dirname(path):获取路径中的目录部分
- path.extname(path):获取一个路径中的扩展名部分
- path.parse(path):把路径转换为对象
- root:根路径
- dir:目录
- base:包含后缀名的文件名
- ext:后缀名
- name:不包含后缀名的文件名
- 🔺path.join([...paths]):拼接路径(第二个参数会自动判断/是否多余)
- path.isAbsolute(path):判断一个路径是否为绝对路径
扩展模块
body-parser
四种解析器
JSON body parser
Raw body parser
Text body parser
URL-encoded form body parser
作用
处理post请求体
安装
npm i body-parser
引入
var bodyParse = require("body-parse")
配置
使用
原生获取post请求体方法
art-template
安装
npm install --sava art-template
npm install -save express-art-template
配置
app.engine('html', require('express-art-template'))
app.set('/views', './views/') //可以更改模板引擎默认调用资源文件夹路径,注意书写
第二个参数为具体的视图文件夹路径
第二个参数为具体的视图文件夹路径
使用
res.render('index.html', {
students: students.students
})
数据渲染
art-template搭配dateFormat实现将时间戳格式化为你想要的日期格式
node配合art-template实现同步分页
express-session
作用
该插件会为req请求对象添加一个成员:req.session默认是一个对象
安装
npm i express-session
引用
var session = require('session')
配置
使用
写
//添加Session数据
//session就是一个对象
req.session.foo = 'bar';
//session就是一个对象
req.session.foo = 'bar';
读
//获取session数据
req.session.foo
req.session.foo
删
req.session.foo = null;
delete req.session.foo //推荐
cookie和session关系
session:保存登录选项,🔺在内存中存储
cookie:保存不敏感数据
formidable
npm
使用场景
- 允许用户从NPM服务器下载别人编写的第三方包到本地使用。
- 允许用户从NPM服务器下载并安装别人编写的命令行程序到本地使用。
- 允许用户将自己编写的包或命令行程序上传到NPM服务器供别人使用。
命令行工具
升级
npm install --global npm
常用命令
npm init
生成package.json说明书文件
npm init -y
可以跳过向导,快速生成
npm install
一次性把dependencies选项中的依赖项全部安装
简写(npm i)
相关依赖项可以通过package.json查看
npm install 包名
- 只下载
- 简写(npm i 包名)
npm install --save 包名
- 下载并且保存依赖项(package.json文件中的dependencies选项)
- 简写(npm i 包名)
- --save 自动生成说明说文件信息package.json
- 文件信息自动添加至package.json
- 若删除掉某些项目使用的模块但有保留package.json,则可在命令行(当前项目文件夹下)执行 npm install 全部自动下回来
npm uninstall 包名
- 只删除,如果有依赖项会依然保存
- 简写(npm un 包名)
npm uninstall --save 包名
- 删除的同时也会把依赖信息全部删除
- 简写(npm un 包名)
npm help
查看使用帮助
npm 命令 --help
查看具体命令的使用帮助(npm uninstall --help)
package.json
建议
每个项目的根目录下都有一个`package.json`文件
执行`npm install 包名`的时候都加上`--save`选项,目的是用来保存依赖信息
初始化
`npm init`
dependencies选项
用来帮助我们保存第三方包的依赖信息
package.json和package-lock.json
作用
提升下载速度
锁定版本号
文件中有一个lock关键字
npm script配置
其它成员
__dirname属性
动态获取当前文件所处目录的绝对路径
__filename属性
动态获取当前文件的绝对路径
Express框架
简介
核心特性
- 可以设置中间件来响应 HTTP 请求。
- 定义了路由表用于执行不同的 HTTP 请求动作。
- 可以通过向模板传递参数来动态渲染 HTML 页面。
安装
使用
1.引包
2.创建服务器程序
3.接受请求,返回响应
4.发布服务
Node操作mongoodb
关系型和非关系型数据库
安装模块
npm i mongoose --save
初识
//引包
const mongoose = require('mongoose');
//创建数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});
//定义集合
const Cat = mongoose.model('Cat', { name: String });
//添加数据
const kitty = new Cat({ name: 'Zildjian' });
//保存成功提示(ES6)
kitty.save().then(() => console.log('meow'));
const mongoose = require('mongoose');
//创建数据库
mongoose.connect('mongodb://localhost:27017/test', {useNewUrlParser: true, useUnifiedTopology: true});
//定义集合
const Cat = mongoose.model('Cat', { name: String });
//添加数据
const kitty = new Cat({ name: 'Zildjian' });
//保存成功提示(ES6)
kitty.save().then(() => console.log('meow'));
设计文档结构(模式—Schema)
1.引用架构对象
var Schema = mongoose.Schema
2.设计集合结构以及约束
var catSchema = new Schema({
name: {
type: String,
required: true //约束:必须给值
},
age: {
type: Number,
required: true
}
})
name: {
type: String,
required: true //约束:必须给值
},
age: {
type: Number,
required: true
}
})
3.创建集合并引用集合结构以及添加约束
const Cat = mongoose.model('Cat', catSchema)
4.导出模式
module.exports = Cat
CRUD
增
//添加数据(记录)
const kitty0 = new Cat({ name: 'Zild', age: 6 });
const kitty1 = new Cat({ name: 'jian', age: 7 });
const kitty0 = new Cat({ name: 'Zild', age: 6 });
const kitty1 = new Cat({ name: 'jian', age: 7 });
//保存并提示(ES6)
kitty0.save().then(() => console.log('meow'));
kitty1.save().then(() => console.log('meow'));
kitty0.save().then(() => console.log('meow'));
kitty1.save().then(() => console.log('meow'));
删
删除一条记录
Cat.deleteOne({name:'Zild'}, function(err,ret){
})
})
删除多条记录
Cat.deleteMany({name:'Zild'},function(err,ret){
})
})
改
链式
Cat.where({ _id: "5ec9c7012909a22e7c89b5ac" }).update({ name: 'Zild', age: 8 }, function(err, ret) {
})
直接修改
Cat.findOneAndUpdate({ name: 'Zild' }, { name: 'Zild1', age: 9 }, function(err, ret) {
})
})
查
查询全部
Cat.find(function(err, ret) {
})
})
查询单个
Cat.find({ name: 'Zild' }, function(err, ret) {
})
})
查询多个
Cat.findOne({ name: 'Zild' }, function(err, ret) {
})
})
异步编程
作用
得到函数内部异步操作的结果
回调地狱
是什么
为什么
怎么解决
Promise
概念
应用场景
解决客户端回调嵌套问题
Promise操作数据库
catch异常处理
中间件
概念
分类
应用程序级别的中间件
万能匹配(不关心任何请求路径和请求方法的中间件):
路由级别的中间件
严格匹配请求路径和请求方法的中间件
内置中间件
express
......
第三方中间件
- body-parser
- compression
- cookie-parser
- mogran
- response-time
- server-static
- session
......
错误中间件
全局统一处理错误
补充
art-template搭配dateformat模块
art-template搭配dateFormat实现将时间戳格式化为你想要的日期格式
nodemon
作用
安装
npm install --global nodemon
使用(cmd)
nodemon 文件
隐藏元素控件(用来提交不希望被用户看到的数据)
node爬虫
nrm
nodejs之请求日志和错误日志
0 条评论
下一页