/**
* 为什么javascript可以在浏览器中被执行 -> js解析引擎
*
* node是什么:
* 基于Chrome V8引擎的js运行环境
* 内置API:
* fs, http, path, js内置对象...
*
* 浏览器是js的前端运行环境,node是js的后端运行环境
* node中无法调用DOM, BOM, AJAX等api,因为node中没有这些内置api
*
* node中执行js
* 命令: node 要执行的js文件路径
*
*
* 一、fs文件系统模块
* 用于操作文件的模块,提供了一系列方法和属性
* 使用:
* const fs = require('fs')
*
* 1. 读取文件
* fs.readFile(path, 编码格式, callback)
* -- 编码格式默认utf-8
* -- callback两个参数, err 和 data
* -- 如果读取成功 err = null
* -- 如果读取失败 err为错误对象,data = undefined
*
* 2. 写入文件
* fs.writeFile(file, data, callback)
* -- file:文件存放路径
* -- data:文件要写入内容
* -- callback: 参数为err
* -- 文件写入成功 err = null
* -- 文件写入失败 err为错误对象
* 3. 路径拼接错误问题,是因为出现了./和../开头的相对路径
* 解决:使用绝对路径 (如: C:\\Users\\zhangyu\\Desktop\\vue双向绑定\\成绩.txt)
* -- 一个\代表转义, 因此要用两个\\
* -- 缺点: 移植性差,不利于维护
* 解决升级:使用__dirname (C:\Users\zhangyu\Desktop\vue双向绑定)
* -- 写法:(__dirname + '/ajax.js')
*
* 二、path路径模块
* 用于处理路径的模块,提供了一系列方法和属性
* 使用:
* const path = require('path')
*
* 1. path.join():将多个路径片段拼接成完整的路径字符串
* let path = require('path')
path.join('a', '/b/c', '../', '/d');
-- 得到: a\b\d
-- 原因: ../会返回上一级,因此c被忽略
* 因此可以使用join拼接__dirname 如: path.join(__dirname, '/ajax.js')
* fs.readFile(path.join(__dirname, '/ajax.js'), 'utf-8', (err, data) => {
console.log('data', data);
})
*
* 2. path.basename(fpath, ext): 获取路径中的最后一部分,通常用于获取文件名
* path.basename('/abc/ajax.js')
* -- 只传一个参数,得到文件名
* -- 得到:ajax.js
* path.basename('/abc/ajax.js', '.js')
* -- 传两个参数,去除文件后缀名
* -- 得到:ajax
*
* 3. path.extname(fpath): 获取文件的扩展名部分
* path.extname('/abc/ajax.js')
* -- 得到 .js
*
*
* 三、http: 用来创建web服务器的模块
* 用法:let http = require('http')
* IP: 每台计算机的唯一地址 "点分十进制" 0-255之间的数字 (eg: 192.168.0.111)
* DNS(域名地址服务器): 提供域名和IP之间转换的服务器
*
* 创建基本的服务器
* 1. 导入http模块
* let http = require('http')
* 2. 创建服务器实例
* let server = http.createServer()
* 3. 绑定request事件,监听客户端请求
* server.on('request', (req, res) => {
* req: url, method等属性
* res.setHeader('Content-Type', 'text/html;charset=utf-8')
* -- 防止中文乱码
* res.end('中文')
* })
* 4. 启动服务器
* server.listen(3000, function(){})
*
*
* express: 基于node,快速、开放、极简的web开发框架
* 安装:
* npm install express --save
* 使用:
let express = require('express')
let app = express()
app.get('/test/:id', (req, res) => {
-- 得到: req.params: {id: xxx}
res.send('aaa的说法二')
})
app.listen(3000, () => {
console.log('启动成功http://127.0.0.1:3000');
})
*
* express.static()托管静态资源
* 使用:
* app.use(express.static('public'))
* 访问地址:
* http://127.0.0.1/img/bg.jpg (注意:public不会出现在访问路径中!!!)
* 如果想让public出现在路径中
* 写法:
* app.use('/public', express.static('public'))
* 托管多个静态资源(调用多次express.static()即可,前面的优先级高)
* app.use(express.static('public'))
* app.use(express.static('./clock'))
*
* express中路由:按照路由顺序进行匹配
* 模块化路由:将路由抽离成单独模块
* 1. 创建路由模块(一个单独的路由文件.js)
* 2. 使用express.Router()
* const express = require('express')
* const router = express.Router()
* router.get('/test', (req, res) => {})
* 3. 导出路由.js文件
* module.exports = router
* 4. index.js页面引入
* const useRouter = require('路由文件.js地址')
* app.use(useRouter)
*
* 为路由添加统一前缀
* app.use('/api', useRouter)
*/
04-27
1582
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
06-05
717
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
12-16
1122
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
08-10
4643
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
10-27
1万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)