node.js知识点总结
一、当exports对象和module.exports对象指向的不是同一个对象时,以module.exports对象为准。
二、系统模块
// 1. fs.readFile() 读取文件
// 语法格式
fs.readFile('包含文件名的文件路径', ['文件编码'], callback)// 例子
fs.readFile('./01.helloword.js', 'UTF-8', (err, doc) => {// 如果文件读取错误err,是一个对象,包含错误信息// 如果文件读取正确,err是空// doc是文件读取的结果console.log(err)console.log(doc)
})// 2. fs.writeFile() 写入文件内容
// 语法格式
fs.writeFile('包含文件名的文件路径', '要写入的内容', callback)// 例子
fs.writeFile('./demo.txt', '即将要写入的内容', (error) => {// 写入失败if (error !== null) return console.log(error)// 写入成功console.log('写入成功')
});
三、path路径拼接语法
// 语法:
path.join('路径','路径',...)// 例子
// public/upload/avator
const path = require('path')
// 路径拼接
const finalPath = path.join('public', 'upload', 'avator');
四、相对路径和绝对路径
- 大多数情况下使用绝对路径,因为相对路径有时候相对的是命令行工具的当前工作目录
- 在读取文件或者设置文件路径时都会选择绝对路径
- 使用__dirname获取当前文件所在的绝对路径
path.join(__dirname, '05.readfile.js')
五、第三方模块
1. nodemon是一个命令行工具,用以辅助项目开发(在Node.js中,每次修改文件都要在命令行工具中重新执行该文件,非常繁琐)。
2. nrm:npm下载地址切换工具(npm默认的下载地址在国外,国内下载速度慢)
3. Gulp:基于node平台开发的前端构建工具。将机械化操作编写成任务,想要执行机械化操作时执行一个命令行命令任务就能自动执行了。(用机器代替手工,提高开发效率)
Gulp的功能:
1) 项目上线,HTML、CSS、JS文件压缩合并
2) 语法转换(es6,less)
3) 公共文件抽离
4) 修改文件浏览器自动刷新
Gulp的方法:
1) gulp.src() 获取任务要处理的文件
2) gulp.pipe()
2) gulp.dest() 输出文件
3) gulp.task() 简历gulp任务
4) gulp.watch() 监控文件的变化
六、package.json文件
项目描文件,记录当前项目信息,例如项目名称、版本、作者、github地址。
七、web服务器
1.创建服务器,get请求
// 用于创建网站服务器的模块
const http = require('http');
// 用于处理url地址
const url = require('url');
// app对象就是网站服务器对象
const app = http.createServer();
// 当客户端有请求的时候
app.on('request', (req,res) => {// req.method 获取请求方式// req.url 获取请求地址// req.headers 获取请求报文信息// 响应报文res.writeHead(200, {'content-type': 'text/html;charset=utf-8'})console.log(req.url)// 1. 要解析的url地址// 2. 将查询参数解析成对象形式let { query, pathname } = url.parse(req.url, true);console.log(query.name)if (pathname == '/index' || pathname == '/') {res.end('<h2>欢迎来到首页</h2>')} else if (pathname == '/list') {res.end('<h2>欢迎来到列表页</h2>')} else {res.end('not found')}// if (req.method == 'GET') {// res.end('<h2>hello user 欢迎来到首页</h2>')// // res.end('get')// } else {// res.end('post')// }
});
// 监听端口
app.listen(3000)
console.log('网站服务器启动成功')
2. post请求参数
1)参数被放置在请求体中进行传输
2)获取POST参数需要使用data事件和end事件
3)使用querystring系统模块将参数转换为对象格式
// 用于创建网站服务器的模块
const http = require('http');
// 处理请求参数模块
const querystring = require('querystring');
// app对象就是网站服务器对象
const app = http.createServer();
// 当客户端有请求的时候
app.on('request', (req,res) => {// post参数是通过事件的方式接收的// data 当请求参数传递的时候触发data事件// end 当参数传递完成的时候触发end事件let postParms = '';req.on('data', (params) => {postParms += params;});req.on('end', () => {console.log(querystring.parse(postParms));});res.end('ok')
});
// 监听端口
app.listen(3000)
console.log('网站服务器启动成功')
3.静态资源,动态资源
const http = require('http');
const app = http.createServer();
const url = require('url');
const path = require('path');
const fs = require('fs');
// 读取文件类型
const mime = require('mime');app.on('request', (req, res) => {// 获取用户请求的路径let pathname = url.parse(req.url).pathname;pathname = pathname == '/' ? 'index.html' : pathname;let realPath = path.join(__dirname, 'public', pathname);let type = mime.getType(realPath);fs.readFile(realPath, (error, result) => {if (error !== null) { res.writeHead(404, {'content-type': 'text/html;charset=utf8'});res.end('文件读取失败')return}res.writeHead(200, {'content-type': type})res.end(result);});
});app.listen(3000)
console.log('服务启动成功')
八、异步编程
1. Promise 解决异步编程得回调地狱
let promise = new Promise((resolve, reject) => {setTimeout(() => {if (true) {resolve({name: '张三'});} else {reject('失败了');}}, 2000)
});
promise.then(result => {console.log(result)
})
promise.catch(error => {console.log(error)
})
2. 异步函数
异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码携程同步的形式,让代码不再有回调函数嵌套,使代码变得清晰明了。
anync 关键字
1)普通函数定义前加async关键字,普通函数变成异步函数
2)异步函数默认返回promise对象
3)在异步函数内部使用return关键字进行结果返回,结果会被包裹在promise对象中,return关键字代替了resolve方法
4)在异步函数内部使用throw关键字抛出程序异常
5)调用异步函数再链式调用then方法获取异步函数执行结果
6)调用异步函数再链式调用catch方法获取异步函数执行的错误信息
await 关键字
1)await关键字只能出现在异步函数中
2) await promise, await后面只能写promise对象,写其他类型的API是不可以的
3)await关键字可以暂停异步函数向下执行,直到promise返回结果
// 1. 普通函数定义的前面加上async关键字,普通函数就变成了异步函数
// 2. 异步函数默认的返回值是promise对象
// 3. 在异步函数内部使用throw关键字进行错误的抛出
// await关键字
// 1. 它只能出现在异步函数中
// 2. await promise 它可以暂停异步函数的执行,等待promise对象返回结果后再向下执行。async function fn () {throw '出错了';return 123;
}fn().then((data) => {console.log(data)
}).catch((error) => {console.log(error)
})async function p1 () {return 'p1';
}
async function p2 () {return 'p2';
}
async function p3 () {return 'p3';
}async function run () {let r1 = await p1()let r2 = await p2()let r3 = await p3()console.log(r1)console.log(r2) console.log(r3)
}
run()
九、Express编程
express框架提供了方便简洁的路由定义方式。
express框架对获取HTTP请求参数进行了简化处理。
express对模板引擎支持程度高,方便渲染动态HTML页面。
express提供了中间件机制有效控制HTTP请求。
express拥有大量第三方中间件对功能进行扩展
// 引用express框架
const express = require('express');
// 创建网站服务器
const app = express();app.get('/', (req, res) => {// send()// 1. send方法内部会检测响应内容的类型// 2. send方法会自动设置http状态码// 3. send方法会帮助我们自动设置响应的内容类型及编码res.send('hello,express');
})app.get('/list', (req, res) => {res.send({name: '张三', age: 23});
})app.listen(3000);
console.log('服务启动成功')
1. 中间件
中间件应用
1)路由保护,客户端在访问需要登录的页面是,可以先使用中间件判断用户登录状态,用户如果未登录,则拦截请求,直接响应,禁止用户进入需要登陆的页面。
2)网站维护公告,在所有路由的最上面定义接收所有请求的中间件,直接为客户端做出响应,网站正在维护中。
3)自定义404页面。
node.js知识点总结相关推荐
- 【node.js知识点(补充版)】
文章目录 一.[定时器] 二.[变量] 三.[字符串] 四.[数组] 五.[数组方法] 六.[数据结构Set] 七.[请求方法] 八. [HTTP状态码] 九.[npm包管理] 十.[Math对象] ...
- Node.js知识点整理之----Buffer类
Buffer类,是用来创建一个专门存放二进制数据的缓存区. Buffer类,是一个可以在任何模块中使用的全局类. Buffer类使用 new 关键字创建该类的实例对象. 三种形式创建实例对象: new ...
- node.js知识点
一.定时器 setTimeout:定时执行,设置一个事件,等待事件到达的时候只执行一次,但是执行以后定时器还在,只是没有运行. setIntevral:循环执行,设置一个时间间隔,每个一段时间都会执行 ...
- nodejs实战《一起学 Node.js》 使用 Express + MongoDB 搭建多人博客
GitHub: https://github.com/nswbmw/N-blog N-blog 使用 Express + MongoDB 搭建多人博客 开发环境 Node.js: 6.9.1 Mong ...
- 45天带你玩转Node(第一天)初探Node.js
45天带你玩转Node 粉丝要求博主系统的写一篇关于Node.js的学习资料,但其实我们的Node.js知识点并不少,所以博主为大家搭建了一个专栏,为了方便大家系统的学习Node.js,大家记得订阅哦 ...
- 解析Node.js v6.9.5官方文档的第一个例子的知识点
2019独角兽企业重金招聘Python工程师标准>>> 这段代码是nodejs界的"hello word",使用nodejs搭建了服务器并返回"hell ...
- node.js学习文档_学习NodeJs从每天一个小知识点开始
NodeJs中process.cwd()与__dirname的区别: process.cwd() : 是当前执行node命令时候的文件夹地址 --工作目录,保证了文件在不同的目录下执行时,路径始终不变 ...
- 【node.js】知识点总结
不会就问就查询!科技利民,学海无涯2! 一.概念 Node.js不是语言.不是库.不是框架: Node.js是JavaScript的运行环境,可以解析.执行JavaScript代码: 使JavaScr ...
- Node.js前置知识点(二):同步/异步
前言 本文是node.js前置知识系列文章的第二篇,主要介绍 同步/异步:阻塞/非阻塞 的相关概念 (参考来源 见文末的 Reference) 一 什么是 同步/异步 同样从 What的角度开始介绍, ...
最新文章
- win7安装mysql-8.0.13-winx64
- C语言输入3298运行结果为,浙江农林大C语言程序设计习题集答.doc
- ubuntu下执行ulimit返回“不允许的操作”,问题解决思路
- BAT会看上哪样的中小公司程序员?
- 用Python实现-----按要求修改文件名
- FAILED: ValidationFailureSemanticException partition spec {dt=2021-04-01} doesn‘t contain all (2) pa
- Spring Boot Web Slice测试–示例
- 使用JAX-RS和Jetty创建Web服务和Rest Server
- 求小数的某一位(信息学奥赛一本通-T1082)
- XML(二)有效的XML: DTD(文档类型定义)介绍与三种使用方式
- Android平台中实现对XML的三种解析方式
- HTML 基础和实例
- jsonrpc(jsonrpc4j)demo
- VirtualBox NAT网络实现 PXE 启动
- 理解运放的虚断和虚短
- android+otg+apk,android手机 OTG功能调试usb串口的demo程序
- 爬取糗事百科图片(正则案例)
- 第七章 - 类的详细设计
- 进击的局座:悄悄话读后感
- Open×××中虚拟ip地址的自定义分配
热门文章
- 嵌入式工程师最后都选择了什么职位?
- 常见硬件设计的EDA工具
- 可以编程的 “骰子” :带 LED、陀螺仪,WiFi!
- windows 11 预览版来了
- 基于FPGA的IIR滤波器设计
- python学习之turtle库基本操作
- 计算机网络原理第二章笔记,计算机网络原理笔记 第三章 数据链路层(一)
- java适配器模式火鸡变凤凰是,读《HeadFirst设计模式》笔记之适配器模式
- eclipse中无法移除jar包_IDEA中已配置阿里镜像,但maven无法下载jar包的问题
- 服务器芯片采购,服务器采购具体要求.pdf