- Nodejs是基于Chrome V8引擎的JavaScript运行环境(后端)
- 浏览器是Javascript前端运行环境
- 为什么JavaScript可以操作DOM,BOM? => 浏览器内置了DOM,BOM的API,浏览器为运行环境(前端)
fs文件系统模块
读取文件 fs.readFile(path, [options,] callback)
path: 文件路径;options:可选参数 编码格式;callback:文件读取完成后,回调函数拿到结果
const fs = require('fs');
fs.readFile('./1.txt', 'utf8', function (err, data) {
if (err) { //读取成功 err为null
return console.log('读取文件失败', err);
}
console.log(data) //data为内容 ,若失败,data-undefined
})
写入内容 fs.writeFile(filepath, data, [options,] callback)
-
只能创建文件,不能创建路径
-
写入同一个文件,内容会覆盖
fs.writeFile('./成绩form.txt', str, 'utf8', function (err) { if (err) { console.log('写入失败') } console.log('写入成功') }) -
拼接路径时,会以当前执行node命令所处的路径,拼接传入的相对路径;或可以直接一个完整路径
-
__dirname 表示当前文件所处的目录
path路径模块
拼接路径 path.join([...paths])多个路径片段拼接成一个路径
__dirname 表示当前的文件路径
const pathstr = path.join('/a', '/b/c', '../', '/d'); // ../会抵消一层
console.log(pathstr) // \a\b\d
fs.readFile(path.join(__dirname, './1.txt'), 'utf8', function (err, data) {
console.log(data)
})
path.basename(path, [ext])获取路径中最后一部分,通常获取文件名
const fpath = path.basename('a/b/c/index.html', '.html');
console.log(fpath) // index
path.extname() 获取文件拓展名
http模块
服务器相关
- IP地址,每台计算机唯一标识
- 域名,和IP一一对应
- 端口号 一个服务器可以运行多个web服务,端口号对应不同web服务
创建web服务器
const http = require('http');
//创建服务器实例
const server = http.createServer();
//绑定request事件,监听请求
server.on('request', function (req, res) { // 客户端通过浏览器请求服务器,就会触发,本地访问127.0.0.1
console.log('visit')
})
// 启动服务器
server.listen(80, function () {
console.log('running')
})
req请求对象 res响应对象
server.on('request',(req, res)=> {
const url = req.url;
const method = req.method;
const str = `请求的url 是 ${url}, method 是 ${method}`
//res.end 向客户端响应内容
res.setHeader('content-type', 'text/html; charset=utf-8') //中文乱码问题
res.end(str)
// str会显示在浏览器页面
})
根据不同url返回不同内容
server.on('request', (req, res) => {
const url = req.url;
let content = '<h1>404 not found</h1>';
if (url === '/' || url === '/index.html') {
content = '<h1>首页</h1>'
} else if (url === '/about.html') {
content = '<h1>关于</h1>'
}
res.end(content)
})
根据请求读取本地文件 并返回
server.on('request', (req, res) => {
const url = req.url;
const pathstr = path.join(__dirname, '../source', url)
fs.readFile(pathstr, (err, data) => {
res.end(data)
})
})
如果读取的内容中,有对其他文件的引用,也会请求
模块化
- 使用require()加载其他模块时,会执行被加载模块的代码
模块作用域 -- 防止全局污染
和函数作用域类似,模块中的变量方法,只能在当前模块内被访问
-
module对象,存储了当前模块的信息
-
module.exports对象,将模块内成员共享出去,使用require方法导入模块,得到的是moudule.exports指向的对象, 可简写为exports
-
require()模块时,得到的永远是module.exports指向的对象
exports.username = 'aa'; module.exports = { name:'bb', age:18 } 得到的是{ name:'bb', age:18}
CommonJS模块化规范
- 模块内部,module变量代表当前模块
- module是一个对象,exports属性是对外接口
- require()加载模块,就是加载module.exports属性
npm 和包
nodejs中,分为内置模块,自定义模块,第三方模块, 第三方模块又称为包,npm为包管理工具