~【笔记】黑马node.js(p1~p94node.js部分)笔记~

点击通往->黑马node.js视频.

黑马node.js笔记 & 目录:

第一章 Node开发概述

一、服务器端开发要做的事情

1、实现网站的业务逻辑

2、数据的增删改查

二、为什么选择Node

1、使用js语法开发后端应用

2、生态系统活跃,有大量开源库可以使用

3、前端开发工具大多基于Node开发

三、Node是什么

Node是一个基于Chrome V8引擎的js代码运行环境

运行环境:

  • 浏览器(软件)能够运行js代码,浏览器就是js代码的运行环境
  • Node(软件)能够运行js代码,Node就是js代码的运行环境

四、Node运行环境搭建

五、Node.js快速入门

1、node.js组成

node.js由两部分组成:ECMAScript(基础语法)+Node模块API

2、Node.js全局对象global
在这里插入图片描述

第二章 模块化开发

一、node.js模块化开发

1、js开发的弊端

js在使用时存在两大问题,文件依赖命题冲突

2、Node.js中模块化开发规范

  • node规定一个js文件就是一个模块,模块内部定义变量和函数默认情况下在外部无法得到
  • 模块内部可以使用exports对象进行成员导出,使用require方法导入其他模块

使用exports对象进行成员导出:

//a.js
//在模块内部定义变量
let version = 1.0;
//在模块内部定义方法
const sayHi = name => `您好,${
     name}`;
//向模块外部导出数据
exports.version = version;
exports.sayHi = sayHi;

使用require方法导入其他模块:

//b.js
//在b.js模块中导入模块a
let a = require('./a.js');
//输出a模块中的version变量
console.log(a.version);
//调用a模块中的sayHi方法并输出其返回值
console.log(a.sayHi('xiaoyang'));

3、导出的另一种方式
在这里插入图片描述

二、系统模块

1、什么是系统模块

node运行环境提供的API。因为这些API都是以模块化的方式进行开发的,所以我们又称为node运行环境提供的API为系统模块

2、fs文件操作

引入fs模块

const fs = require('fs');
  • 读取文件内容
    在这里插入图片描述
  • 写入文件内容
    在这里插入图片描述
    3、path路径操作

(1)为什么要进行路径拼接

  • 不同操作系统的路径分隔符不统一

(2)路径拼接语法

//语法
path.join('路径一','路径二',...)

在这里插入图片描述

三、第三方模块

1、什么是第三方模块

别人写好的、具有特定功能的、我们可以直接使用的模块即第三方模块,由于通常是由多个文件组成并且被放置在一个文件夹中,所以又名为包

​ 第三方模块有两种存在形式:

  • 以js文件形式存在,提供实现项目具体功能的API接口
  • 以命令行工具形式存在,辅助项目开发

2、如何获取第三方模块

npmjs.com:第三方模块的存储和分发仓库

  • 下载:在命令行输入 npm install 模块名称
  • 卸载:在命令行输入 npm uninstall 模块名称

全局安装与本地安装

  • 命令行工具:全局安装
  • 库文件:本地安装

3、第三方模块nodemon

nodemon是一个命令行工具,用于辅助开发

在Node.js,每次修改文件都要在命令行工具重新执行 改文件,非常繁琐

使用步骤:
在这里插入图片描述
4、第三方模块nrm

nrm:npm下载地址切换工具(镜像下载,npmjs.com国外网站)

使用步骤:
在这里插入图片描述
5、第三方模块Gulp

基于node 平台开发的前端构建工具

将机械化操作编写成任务,想要执行机械化操作时执行一个命令行命令就能自动执行了,用机器代替手工,提高开发效率
(1)Gulp能做什么
在这里插入图片描述
(2)使用
在这里插入图片描述
(3)gulp提供的方法
在这里插入图片描述
在这里插入图片描述
(4)gulp插件
在这里插入图片描述

四、node_modules文件夹

1、node_modules文件夹的问题

  • 文件夹过多过碎,当我们整体拷贝给别人的时候,传输会很慢
  • 复杂的模块依赖关系需要被记录,确保模块的版本和当前一致,否则会导致当前项目运行报错

2、package.json文件的作用

项目描述文件,记录了当前项目的信息,例如项目名称、版本、作者、github地址,当前项目依赖了哪些第三方模块等等,使用npm init -y命令生成

3、项目依赖

在项目的开发阶段和线上运行阶段,都需要依赖的第三方包,称为项目依赖

使用npm install 包命令下载的文件会默认被添加到package.json文件的dependencies字段中

在这里插入图片描述

五、node.js中模块的加载机制

1、模块查找规则-当模块拥有路径但没有后缀时
在这里插入图片描述
2、模块查找规则-当模块没有路径且没有后缀时
在这里插入图片描述

第三章、服务器端基础

一、创建web服务器

1、创建web服务器

//引用系统模块http
const http = require('http');
//创建web服务器
const app = http.createServer();
//当客户端发送请求的时候
app.on('request',(req,res)=>{
   
	//响应
	res.end('<h1>hi,user</h1>');
});
app.listen(3000);
console.log('网站服务器启动成功');

二、http协议

1、http协议的概念

超文本传输协议(http)规定了如何从网站服务器传输超文本到本地浏览器,它基于客户端服务器架构工作,是客户端和服务器端请求和应答的标准
在这里插入图片描述

2、报文

在http请求和响应的过程中传递的数据块就叫报文,包括要传送的数据和一些附加信息,并且要遵守规定好的格式
在这里插入图片描述
3、请求报文

(1)请求方式

  • GET 请求数据
  • POST 发送数据(相对于GET安全一点)

(2)请求地址(RequestURL)
在这里插入图片描述
4、响应报文

(1)http状态码

  • 200请求成功
  • 404请求的资源没有找到
  • 500服务器端错误
  • 400客户端请求语法错误

(2)内容类型

  • text/html
  • text/css
  • application/javascript
  • inage/jpag
  • application/json

三、HTTP请求与响应处理

1、请求参数

客户端向服务器端发送请求时,有时候需要携带一些客户信息,客户信息需要通过请求参数的形式传递到服务器端,比如登录操作。

2、GET请求参数

参数被放置在浏览器地址栏中。

3、POST请求参数

  • 参数被放置在请求体中进行传输
  • 获取POST参数需要使用data事件和end事件
  • 使用querystring系统模块将参数转换为对象格式
    在这里插入图片描述
    4、路由

路由是指客户端请求地址与服务器端程序代码的对应关系,即请求什么就响应什么
在这里插入图片描述
核心代码:
在这里插入图片描述
5、静态资源

服务器端不需要处理的,可以直接响应给客户端的资源就是静态资源,例如css、js、image文件

6、动态资源

相同的请求地址不同的响应资源

四、Node.js的工作原理

1、同步API,异步API
在这里插入图片描述

  • 同步API:只有当前执行完成后,才能执行下一步API

  • 异步API:当前API的执行不会阻塞后续代码的执行

2、同步API和异步API区别

  • 返回值, 同步API可以从返回值中拿到API执行的结果,但是异步API是不可以的(默认返回undefined)
    在这里插入图片描述
  • 代码执行顺序
  • 在这里插入图片描述
    3、回调函数

自定义函数让别人去调用
在这里插入图片描述
4、node.js中的异步API
在这里插入图片描述
5、Promise

Promise出现的目的是解决node.js异步编程中回调地狱的问题

let promise = new Promise((resolve,reject) =>{
   
	setTimeout(() =>{
   
		if(true){
   
			resolve({
   name:'张三'})
		}else{
   
			reject('失败了')
		}
	},2000);
});
promise.then(result => console.log(result);)
	.catch(error =>console.log(error);)

6、异步函数

异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,使代码变得清晰明了
在这里插入图片描述
在这里插入图片描述

第四章 数据库基础

一、数据库概述及环境搭建

1、什么是数据库

数据库即存储数据的仓库,可以将数据进行有序的分门别类的存储。它是独立于语言之外的软件,可以通过API去操作它。
在这里插入图片描述

2、MongoDB数据库的下载安装

在这里插入图片描述
点击通往下载安装MongoDB->MongoDB.
在这里插入图片描述

3、数据库相关概念

在一个数据库软件中可以包含多个数据库,在每一个数据库仓库中可以包含多个数据集合,每个数据集合可以包含多条文档(具体数据)。

术语 解释说明
database 数据库,mongoDB数据库软件中可以建立多个数据库
collection 集合,一组数据的集合,可以理解为javascript中的数组
document 文档,一条具体的数据,可以理解为JavaScript中的对象
field 字段,文档中的属性名称,可以理解为JavaScript中的对象属性
4、Mongoose第三方包

使用node.js操作MongoDB数据库需要依赖的node.js第三方包mongoose
使用npm install mongoose命令下载

5、启动mongodb

在命令行工具(管理员身份)运行net start mongodb即可以mongodb,否则mongodb无法连接

6、数据库连接

使用mongoose提供connect方法即可以连接数据库

//引入
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/playground')
	.then(()=>console.log('数据库连接成功'))
	.catch(err=>console.log('数据库连接失败',err));
7、创建数据库

在mongodb中不需要显示的创建数据库,如果正在使用的数据库不存在,mongodb会自动创建

二、mongodb增删改查操作

1、创建集合(collection)

创建集合分为两步

  • 一是对集合设定规则
  • 二是创建集合,

创建mongoose.Schema构造函数的实例即可创建集合
语法如下:

//设定集合规则,用Schema
const courseSchema = new mongoose.Schema({
   
	name:String,
	author:String,
	isPublished:Boolean
});
//创建集合并应用规则
//用mongoose.model创建集合实例,集合名首字母要大写
//这里虽然取得名字是Course,但在数据库中是courses
const Course = mongoose.model('Course',courseSchema);
2、创建文档(document)

创建文档实际上就是向集合中插入数据

方法一:
分为两步:

  • 创建集合实例,即创建文档
  • 调用实例对象下的save方法将数据库保存到数据库中

语法如下:

//创建集合实例
const course = new Course({
   
    name: 'node.js',
    author: 'hm',
    isPublished: true
})
// 调用实例对象下的save方法将数据库保存到数据库中
course.save();

方法二:
用create方法

Course.create({
    name: 'es6', author: 'pink', isPublished: false }, (err, result) => {
   
    console.log(err);
    console.log(result);
})

和数据库相关的操作都是异步操作
create方法也返回promise对象,所以也可以这样写:

Course.create({
    name: 'es6', author: 'pink', isPublished: false })
	.then(doc=>console.log(doc))
	.catch(err=>console.log(err))
3、查询文档

①要查询文档就首先要有足够的数据,所以要先导入数据,语法如下:
mongoimport -d 数据库名称 -c 集合名称 --file 要导入的数据文件

②查询文档

(1)通过find()方法查询

//根据条件查找文档
//find()中语句为空则查找所有文档
Course.find().then(result => console.log(result));
//返回文档集合

当find()中为空时:

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/playground')
    .then(() => console.log('数据库连接成功'))
    .catch(err => console.log('数据库连接失败', err));

const courseSchema = new mongoose.Schema({
   
    name: String,
    author: String,
    isPublished: Boolean
});

const Course = mongoose.model('Course', courseSchema);

Course.find().then(result => console.log(result));

执行后结果为:
在这里插入图片描述

将find()中加一个条件{ _id: ‘615aef0b3afad93afa05a9a9’ }:

const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/playground')
    .then(() => console.log('数据库连接成功'))
    .catch(err => console.log('数据库连接失败', err));

const courseSchema = new mongoose.Schema({
   
    name: String,
    author: String,
    isPublished: Boolean
});

const Course = mongoose.model
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东篱_Y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值