一、当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知识点总结相关推荐

  1. 【node.js知识点(补充版)】

    文章目录 一.[定时器] 二.[变量] 三.[字符串] 四.[数组] 五.[数组方法] 六.[数据结构Set] 七.[请求方法] 八. [HTTP状态码] 九.[npm包管理] 十.[Math对象] ...

  2. Node.js知识点整理之----Buffer类

    Buffer类,是用来创建一个专门存放二进制数据的缓存区. Buffer类,是一个可以在任何模块中使用的全局类. Buffer类使用 new 关键字创建该类的实例对象. 三种形式创建实例对象: new ...

  3. node.js知识点

    一.定时器 setTimeout:定时执行,设置一个事件,等待事件到达的时候只执行一次,但是执行以后定时器还在,只是没有运行. setIntevral:循环执行,设置一个时间间隔,每个一段时间都会执行 ...

  4. nodejs实战《一起学 Node.js》 使用 Express + MongoDB 搭建多人博客

    GitHub: https://github.com/nswbmw/N-blog N-blog 使用 Express + MongoDB 搭建多人博客 开发环境 Node.js: 6.9.1 Mong ...

  5. 45天带你玩转Node(第一天)初探Node.js

    45天带你玩转Node 粉丝要求博主系统的写一篇关于Node.js的学习资料,但其实我们的Node.js知识点并不少,所以博主为大家搭建了一个专栏,为了方便大家系统的学习Node.js,大家记得订阅哦 ...

  6. 解析Node.js v6.9.5官方文档的第一个例子的知识点

    2019独角兽企业重金招聘Python工程师标准>>> 这段代码是nodejs界的"hello word",使用nodejs搭建了服务器并返回"hell ...

  7. node.js学习文档_学习NodeJs从每天一个小知识点开始

    NodeJs中process.cwd()与__dirname的区别: process.cwd() : 是当前执行node命令时候的文件夹地址 --工作目录,保证了文件在不同的目录下执行时,路径始终不变 ...

  8. 【node.js】知识点总结

    不会就问就查询!科技利民,学海无涯2! 一.概念 Node.js不是语言.不是库.不是框架: Node.js是JavaScript的运行环境,可以解析.执行JavaScript代码: 使JavaScr ...

  9. Node.js前置知识点(二):同步/异步

    前言 本文是node.js前置知识系列文章的第二篇,主要介绍 同步/异步:阻塞/非阻塞 的相关概念 (参考来源 见文末的 Reference) 一 什么是 同步/异步 同样从 What的角度开始介绍, ...

最新文章

  1. win7安装mysql-8.0.13-winx64
  2. C语言输入3298运行结果为,浙江农林大C语言程序设计习题集答.doc
  3. ubuntu下执行ulimit返回“不允许的操作”,问题解决思路
  4. BAT会看上哪样的中小公司程序员?
  5. 用Python实现-----按要求修改文件名
  6. FAILED: ValidationFailureSemanticException partition spec {dt=2021-04-01} doesn‘t contain all (2) pa
  7. Spring Boot Web Slice测试–示例
  8. 使用JAX-RS和Jetty创建Web服务和Rest Server
  9. 求小数的某一位(信息学奥赛一本通-T1082)
  10. XML(二)有效的XML: DTD(文档类型定义)介绍与三种使用方式
  11. Android平台中实现对XML的三种解析方式
  12. HTML 基础和实例
  13. jsonrpc(jsonrpc4j)demo
  14. VirtualBox NAT网络实现 PXE 启动
  15. 理解运放的虚断和虚短
  16. android+otg+apk,android手机 OTG功能调试usb串口的demo程序
  17. 爬取糗事百科图片(正则案例)
  18. 第七章 - 类的详细设计
  19. 进击的局座:悄悄话读后感
  20. Open×××中虚拟ip地址的自定义分配

热门文章

  1. 嵌入式工程师最后都选择了什么职位?
  2. 常见硬件设计的EDA工具
  3. 可以编程的 “骰子” :带 LED、陀螺仪,WiFi!
  4. windows 11 预览版来了
  5. 基于FPGA的IIR滤波器设计
  6. python学习之turtle库基本操作
  7. 计算机网络原理第二章笔记,计算机网络原理笔记 第三章 数据链路层(一)
  8. java适配器模式火鸡变凤凰是,读《HeadFirst设计模式》笔记之适配器模式
  9. eclipse中无法移除jar包_IDEA中已配置阿里镜像,但maven无法下载jar包的问题
  10. 服务器芯片采购,服务器采购具体要求.pdf