基础
概述
Node.js是JavaScript运行时的环境,可以解析和执行JavaScript代码,使得JavaScript可以脱离浏览器进行运行,是构建于Chrome的V8引擎之上的
JavaScript(浏览器vsNode.js)
浏览器中的JavaScript
- ECMAScript语法
- BOM
- DOM
Node.js中的JavaScript
- ECMAScript语法
- 没有BOM、DOM
特性
Node.js使用event-driven和non-blocking I/O model来实现轻量和高效
- event-driven事件驱动
- non-blocking I/O model非阻塞IO模型(异步)
核心模块
为JavaScript提供一些服务器级别的操作API
- 文件读写
- 进程管理
- 网络通信
fs
文件读写
文件读取
fs.readFile(参数1,回调函数(参数2,参数3){})
- 参数1:读取文件的路径
- 参数2:error
读取失败:错误对象
读取成功:null - 参数3:data
读取失败:null
读取成功:数据
文件写入
fs.writeFile(参数1,回调函数(参数2){})
- 参数1:读取文件的路径
- 参数2:error
读取失败:错误对象
读取成功:null
process
可以管理进程
console.log(process.argv);
// 'C:\\Program Files\\nodejs\\node.exe',
// 'D:\\Postgraduate\\Html-Css-Javascript\\Node.js\\01\\code\\8-process.js',
// 'argv1',
// 'argv2'
console.log(process.argv.slice(2));
// ['argv1', 'argv2']
http
HTTP服务器
- 加载http核心模块
- 使用http.createServer()创建一个web服务器,并返回一个server实例
- 服务器提供的服务包括:发送请求、接收请求、处理请求、发送响应
- 绑定端口号,启动服务器
//加载http核心模块
let http = require('http');
//http.createServer,创建一个web服务器,返回一个server实例
let server = http.createServer()
//服务器提供的服务:对数据的服务,发送请求,接受请求,处理请求,发送响应
server.on('request', function(request, response) {
//接收请求
console.log('收到客户端请求' + request.url);
//1.发送响应
//1.1
// response.write('success')
// response.end()
//1.2
//response.end('success')
//2.根据不同的请求路径,返回不同的响应
let url = request.url
if (url === '/') {
response.end('index page')
} else if (url === '/login') {
response.end('login page')
} else if (url === '/product') {
let product = [{
name: '苹果',
price: 20
}, {
name: '香蕉',
price: 30
}]
//响应内容只能是二进制数或者字符串,因此返回对象是数组或其他类型,需要转换类型
response.end(JSON.stringify(product))
} else {
response.end('404 Not Found')
}
})
//绑定端口号,启动服务器
server.listen(3000, function() {
console.log('服务器启动成功,可以通过http://127.0.0.1:3000/来访问');
})
注:
- 发送响应,返回中文信息,会乱码,需要设置字符集
- 可以发送多次响应,但必须以response.end()结束,否则浏览器会一直等待响应。可在end中写响应信息
模块化
在node中,没有全局作用域,只有模块作用域。只能通过require访问另一个文件,但内部的代码不会受影响
require的作用
- 加载文件模块并执行
- 获取被加载文件模块导出的接口对象,通过exports挂载文件模块的对象,让其他文件模块可以访问得到
//文件1
let onExp = require('./on')
console.log(onExp.v);
console.log(onExp.add(10, 20));
//文件2
let v = 'I am on'
exports.v = 'I am on'
exports.add = function(a, b) {
return a + b
}