Node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。

1. 基础知识

在 NodeJS 中,一般将代码合理拆分到不同的 JS 文件中,每一个文件就是一个模块,而文件路径就是模块名。在编写每个模块时,都有 require、exports、module 三个预先定义好的变量可供使用(CommonJS 规范)。

// require - 在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。
var foo1 = require('./foo');
var foo2 = require('./foo.js');
// exports - 当前模块的导出对象,用于导出模块公有方法和属性。
// module - 通过 module 对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象。
const newModule = {
	add: (a, b) => a + b
}
module.exports  = newModule;

2. 网络模块

2.1 Http 模块

const http = require('http')
const server = http.createServer(function (req, res) {
    res.writeHead(200,{"Content-Type":"text/html;charset=UTF8"}); //插入响应头
    if (req.url === '/index.html') {
        res.write('This is demo.')
    } else {
        res.write('404')
    }
    res.end();
});

server.listen(3000, function () {
    console.log('服务器启动成功了,可以通过 http://127.0.0.1:3000/ 来进行访问')
});

2.2 URL 模块(解析 URL)

2.3 多进程

3. 文件模块

3.1 fs 模块

  • 检测是文件还是目录 - fs.stat

  • 创建目录 - fs.mkdir

  • 写文件 - fs.writeFile

  • 读文件 - fs.readFile

    • toString():buffer转换成字符串

    • toJSON():buffer转化成Json

  • 追加文件 - fs.appendFile (如果没有文件则会生成文件,相当于创建文件)

  • 读取目录 - fs.readdir

  • 重命名 - fs.rename

  • 删除目录 - fs.rmdir

  • 删除文件 - fs.unlink

  • 管道流(大文件一般都是用流)

3.2 zlib 模块(压缩包)

4. Express 框架

4.1 快速入门

安装

生成器工具 express-generator 快速创建一个应用的骨架

路由

静态文件读取

4.2 路由

格式: app.METHOD(path, [callback...], callback)

响应对象(res)的方法向客户端返回响应:

方法
描述

res.download()

提示下载文件。

res.end()

终结响应处理流程。

res.json()

发送一个 JSON 格式的响应。

res.jsonp()

发送一个支持 JSONP 的 JSON 格式的响应。

res.redirect()

重定向请求。

res.render()

渲染视图模板。

res.send()

发送各种类型的响应。

res.sendFile()

以八位字节流的形式发送文件。

res.sendStatus()

设置响应状态代码,并将其以字符串形式作为响应体的一部分发送。

链式路由:

模块化路由的写法

4.3 中间件Middleware

Express 本身就是由路由和中间件构成一个的 web 开发框架,中间件可以访问请求对象、响应对象和next变量,(不知道是否可以简单理解为回调函数),其功能包括功能包括:

  • 执行任何代码。

  • 修改请求和响应对象。

  • 终结请求-响应循环。

  • 调用堆栈中的下一个中间件。

应用级中间件:绑定到 app 对象使用 app.use()app.METHOD()

路由级中间件:绑定的对象为 express.Router()

错误处理中间件:使用 4 个参数(err, req, res, next):

第三方中间件(以解析 cookie 的中间件 cookie-parser 为例):

如果你对内容有任何疑问,欢迎提交 ❕issues✉️ email

最后更新于

这有帮助吗?