Node.js
-
引入 fs 模块 --require('fs')
-
调用 writeFile 写入内容
-
调用 readFile 读取内
fs 模块
path 模块
由于使用的是相对路径,它相对的是命令执行的路径,而不是当前文件所在的路径,所以要解决文件读取的缺陷,就要使用 path 模块
__dirname :内置全局变量,表示当前文件所在的目录(绝对路径)
使用 path.join() 和 __dirname 来填写要查找的目标文件绝对地址
fs.readFile(path.join(__dirname,'../text.txt'), ( err,data )=> {
console.log(err)
console.log(data.toString())
})
正则表达式
加号 + 是 1 次 及以上,此时所有量词都是贪婪模式
\r 回车符
\n 换行符
星号 * 表示 0 次及以上
贪婪模式:会一直匹配,直到当前数据的最后一个符合条件的,才会匹配停止
关闭贪婪模式: 在当前量词的后面加一个 ?就可以了(使用 问号,可以 【 ??】)
jss.replace(/[\r\n]/g, ' ') .replace(/\s+/g, ' ') .replace(/console.log\(.+?\)/g , '')
http 模块
运行本服务在终端,用浏览器访问 http://localhost:3000/ 发起请求(localhost 是本机域名)
注意:终端里启动了服务,如果想要终止按 ctrl c 停止即可
监听 require 事件 ,对本次请求,做一些响应处理
http 请求是指 :一次请求对应着一次响应
require 事件,有两个参数:
参数一:req 请求对象,这一次用户请求的信息
参数二:res 响应对象,这一次要响应给用户的信息
//引入 http 模块,创建 Web 服务对象
const http = require('http')
const server = http.createServer()
// 监听 request 事件,对本次请求,做一些响应处理
server.on('request', (req, res) => {
console.log('请求了')
res.end('Hello World')
})
// 启动 Web 服务监听对应端口号
server.listen(3001, ()=> {
// 服务器启动
console.log('服务器启动')
})
目标:Web 服务支持中文字符
问题:返回响应内容为,中文字符,浏览器无法正确显示
原因:Web 服务没有设置响应头,指定说明内容类型和编码格式
解决:设置响应头内容类型,让请求方能正确解析
语法:res.setHeader('Content-Type', 'text/html;charset=utf-8')
运行 Web 服务,用浏览器发送请求
text/html;charset=utf-8 ~响应的是 HTML 字符串,编码为 utf-8
res.setHeader('Content-Type', 'text/html;charset=utf-8')
application/json;charset=utf-8 ~响应的是 JSON 字符串,一般是写接口用的
text/plain;charset=utf-8 ~普通文本
querystring 模块方法
格式化查询字符串
/**
* 目标:基于 Web 服务,开发-城市列表数据接口
* 步骤:
* 1. 判断 req.url 资源路径+查询字符串,路径前缀匹配/api/city
* 2. 借助 querystring 模块的方法,格式化查询参数字符串
* 3. 读取 city.json 城市数据,匹配省份名字下属城市列表
* 4. 返回城市列表,启动 Web 服务测试
*/
// 创建 Web 服务
const fs = require('fs')
const path = require('path')
const http = require('http')
const ser = http.createServer()
const querystring = require('querystring')
// 监听 request 事件,对本次请求,做一些响应处理
ser.on('request', (req, res) => {
if (req.url === '/api/pci') {
// 读取内容
fs.readFile(path.join(__dirname, 'data/province.json'), (err, data) => {
// 错误,趁早返回
if (err) return console.log(err)
// 转换中文字符串,响应的是 JSON 字符串,一般是写接口用的
res.setHeader('Content-Type', 'application/json;charset=utf-8')
// res.end 返回到页面的内容
res.end(data.toString())
})
// 判断,路径以 /api/city 开头的,不能使用全等,因为后面数据比较杂
} else if (req.url.startsWith('/api/city')) {
// 切割从页面返回来的数据,转成数组,取数组 1
const paramStr = req.url.split('?')[1]
// .parse() 是querystring模块的一个方法,专门用来解析的(将 乱码 转换成 中文)
const paramObj = querystring.parse(paramStr)
// 读取本地内容
fs.readFile(path.join(__dirname, 'data/city.json'), (err, data) => {
// 趁早返回
if(err) return console.log(err)
// 获取到的内容是 JSON字符串,转换为 对象才好操作
const zj = JSON.parse(data.toString())
// 获取到对应的数组
const jname = zj[paramObj.pname]
// 响应的是 JSON 字符串,一般是写接口用的
res.setHeader('Content-Type', 'application/json;charset=utf-8')
// 将对象 转换为 JSON 字符串
res.end(JSON.stringify(jname) )
})
} else {
// 其他情况下,报错
res.end('404')
}
})
// 请求地址的端口号
ser.listen(3010, () => {
console.log('服务器启动')
})
CommonJS 标准 模块化的导入导出
module.exports 导出模块
导入模块
// 导入模块
const obj = require('./utils')
ECMAScript 标准 - 默认导出和导入
Node 默认采用的 CommonJS 标准,所以默认情况下无法直接使用Es6 模块化标准,需要 在当前文件夹 新建 package.json 文件,并设置 {"type":"module"}
不管是什么模块化的标准,目的都是为了实现模块化,将其他模块导入到自己模块中使用,自己的模块可以暴露给其他模块使用
在 Node 中就使用默认的 CommonJS 标准,以后写前端就全部使用 ES6 标准模块化
ES6默认导入语法:
import 变量名 from '模块名或者路径'
ECMAScript 标准 - 命名导出和导入
默认导出和导入 和 命名导出和导入 的区别在于 命名导出和导入 可以按需导出
这两个 导出和导入 方式可以同时使用
const baseURL = 'http://hmajax.itheima.net'
// 命名导出
export const getArraySum = arr => arr.reduce((sum, item) => sum += item, 0)
// 默认导出
export default {
baseURL
}
------------------------------------------------------------
// 命名导入
import { getArraySum } from "../01/utils.js";
// 默认导入
import obj from './utils.js
在写模块时, 模块名 or 路径 ?
自己写的模块就写路径,其他情况都是模块名(内置的 / 下载的)
npm 软件包
-D ~安装开发依赖(只有在开发时使用,项目上线就不在需要了)
npm i nodemon -g ~安装 nodemon,它可以检查代码更新,自动重启程序
node xxx ~执行js文件
package.json
npm init -y ~初始化
npm i 软件包名 ~下载本地软件包
npm i 软件包名 -g ~下载全局软件包
npm uni 软件包名 ~删除软件包
解决路径问题
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Web pack 打包工具
-D ~安装开发依赖(只有在开发时使用,项目上线就不在需要了)
npm run 要运行的命令 ~运行命令
source map 仅适用于开发环境,不要在生产环境使用(防止被轻易查看源码位置)

2860

被折叠的 条评论
为什么被折叠?



