Node.js 的使用

Node.js

  1. 引入 fs 模块 --require('fs')

  2. 调用 writeFile 写入内容

  3. 调用 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 仅适用于开发环境,不要在生产环境使用(防止被轻易查看源码位置)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值