什么是nodejs
node.js就是js,是js服务端运行环境runtime,只是借助于Chrome V8引擎,实现js后端编程。
任何一台电脑都可以作为服务器。
注:浏览器是js的前端运行环境runtime
特点
nodejs适用于 I/O 密集型操作,不适用于CPU密集型操作(大量计算)
- 单线程
- 非阻塞 I/O
- 访问文件
- 网络请求
- 数据库查询
- 键盘/鼠标交互
- 事件驱动
commonjs规范
nodejs遵循commonjs规范
AMD规范和commonJS
1.相同点:都是为了模块化。
2.不同点:AMD规范则是非同步加载模块,允许指定回调函数。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操作。
模块化
解决js变量污染(多个js文件之间,存在的变量名)的问题,一个文件就是一个模块
-
模块引入
导入node_modules目录下的文件文件夹
require()-
引入流程
流程一:
- 当作文件处理(.js 或 .json 或 .node)
- 当作文件夹处理
- 先找package.json 里面的main对应文件
- 没有main,找index.js || json
- 都没有,报错
流程二:
- 先找内置模块
- 非内置,找第三方模块
- 都没有,报错
-
-
模块导出
- module.exports = {} 按需导出
- exports.module = module
- module.exports. = exports
exports 是 module.exports 的引用,
http模块
- 构建服务
MIME 参考手册
// 构建服务对象
// 内置模块的导入不需要写相对路径,直接写模块名称
const http = require("http")
const server = http.createServer((req, res) => {
// 中文配置
// res.write()支持程度低;res.send()对参数支持程度比较高。
res.setHeader("content-type","text/html;charset=utf-8")
// write和send相比,send对数据格式兼容性更好
res.write("你好 nodejs")
res.send("你好 nodejs")
res.end("1")
})
// 服务对象监听端口
server.listen(3000)
- 启动服务
终端输入(index.js是构建服务对象所在的文件名)
node index.js
- 页面输出
访问 localhost:3000
hello nodejs
fs模块
const fs = require("fs")
// 文件内容一次性全部读取到内存,然后返回
const content = fs.readFileSync("./index.html")
stream
// 流读取,是一个data事件的集合,读取大文件常用
const readStream = fs.createReadStream("./detail.html")
readStream.pipe(res)
支持cookie
npm install cookie
安装插件命令
// 全局安装
npm i 插件名 -g
// 开发模式安装
npm i 插件名 -D