fs文件管理系统模块

fs.readFile文件的读取

let fs = require('fs');

fs.readFile('./1.txt','utf-8',(err,i)=>{
   console.log(err);
    console.log(i)

})

err为null则是读取成功

undefined为读取失败

fs.writeFile()文件的写入

fs.writeFile('./1.txt','abcd','utf-8',(err)=>{
    console.log(err);
})

__dirname当前文件目录

path路径模块

path.join()路径拼接

let path=require('path')
let fs = require('fs')
fs.readFile(path.join(__dirname,'./1.txt'),'utf-8',(err,i)=>{
    console.log(err,i);
})

path.basename().

web服务器的创建

1.导入http模块

const http = require('http');

2.创建web服务器

const server=http.createServer();

3.监听web服务器的的request事件

server.on('request',(req,res)=>{
    console.log(req.url);
    res.end('返回信息')
})

4.启动web服务器

server.listen(8080,()=>{
    console.log('启动成功');
})

将md文件转化为html i5ting_toc

i5ting_toc -f 要转换的md文件路径 -o

开发属于自己的npm包

新建itheima-tools 文件夹,作为包的根目录

在itheima-tools 文件夹中,新建如下二个文件:
1.packagejson(包管理配置文件)
2.indexjs
(包的入文件)
3.READMEmd(包的说明文档)

1.packagejson(包管理配置文件)基本设置

{
"name":ritheima-tools"
"version": "1 .0.0"
"main": "index.js"
"description""提供了格式化时间、HTMLEscape相关的功能"
"keywords":[
"itheima"
"dateFormat"
"escape"
"license":"ISC"
}

Express

简单例子代码

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))
app.post('/user',(req,res)=>res.send({name:'1'}))
app.get('/list',(req,res)=>{
res.send(req.query)
})
app.get('/xix/:id',(req,res)=>{
    res.send(req.params)
})
app.listen(port, () => console.log(`Example app listening on port ${port}!`))

添加静态资源仓库

app.use(express.static('public'))
//或者
app.use('/public',express.static('public'))

路由的模块化

let express= require('express');
let router = express.Router()
router.get('/list/mi',(req,res)=>{
    res.send('shi')
})
module.exports = router
const userouter = require('./router')
app.use(userouter)

Express内置中间件

express.static()

express.json() 解析JSON格式的请求体数据

// 配置解析 application/json 格式数据的内置中间件
app.use(express .json( ))

express.urlencoded() 解析 URL-encoded格式的请求体数据

// 配置解析 application/x-ww-form-urlencoded 格式数据的内置中间件
app.use(express.urlencoded({ extended: false }))

解决跨域

CORS

跨域资源共享)由一系列 HTTP 响应头组成,这些 HTTP 响应头决定CORS (Cross-Origin Resource Sharing.浏览器是否阻止前端 JS 代码跨域获取资源

浏览器的同源安全策略默认会阻止网页“跨域”获取资源。但如果接口服务器配置了 CORS 相关的 HTTP 响应头
就可以解除浏览器端的跨域访问限制。

// 一定要在路由之前,配置 cors 这个中间件,从而解决接口跨域的问题

npm i cors // 安装
const cors = require( cors)

app.use(cors())
// 一定要在路由之前,配置 cors 这个中间件,从而解决接口跨域的问题

底层原理

CORS 响应头部

  1. -Access-Control-Allow-Origin
如果指定了 Access-Control-Allow-Origin 字段的值为通配符*,表示允许来自任何域的请求
res.setHeader('Access-Control-Allow-Origin','*')
  1. -Access-Control-Allow-Headers

默认情况下,CORS 仅支持客户端向服务器发送如下的9 个请求头:
Accept、Accept-Language、 Content-Language、 DPR、Downlink, Save-Data、 Viewport-Width、 WidthContent-Type (值仅限于 text/plain、multipart/form-data、 application/x-www-form-urlencoded 三者之一)如果客户端向服务器发送了额外的请求头信息,则需要在服务器端,通过 Acess-Control-Allow-Headers 对额的请求头进行声明,否则这次请求会失败!

1 // 许客户端额外向服务器发送 Content-Type 请求头和 X-Custom-Header 请求头
2 // 注意:多个请求头之间使用英文的逗号进行分割
3 res.setHeader('Access-Control-Allow-Headers','Content-Type, X-Custom-Header ' )
  1. -Access-Control-Allow-Methods

    默认情况下,CORS仅支持客户端发起GET、POST、HEAD请求如果客户端希望通过 PUT、DELETE 等方式请求服务器的资源,则需要在服务器端,通过 Access-ontrol-Alow-Methods来指明实际请求所允许使用的 HTTP 方法

    1 // 只允许 POST、GET、DELETE、HEAD 请求方法
    2 res .setHeader('Access-Corkrol-Allow-Methods',' POST,GET,DELETE,HEAD')
    3 // 允许所有的 HTTP 请求方法
    4 res.setHeader('Access-Control-Allow-Methods'
    

预检请求

只要符合以下任何一个条件的请求,都需要进行预检请求:
请求方式为 GET、POST、HEAD 之外的请求 Method 类型
请求头中包含自定义头部字段
向服务器发送了 application/json 格式的数据

在浏览器与服务器正式通信之前,浏览器会先发送 OPTION 请求进行预检,以获知服务器是否允许该实际请求,所以这服务器成功响应预检请求后,才会发送真正的请求,并且携带真实数据次的OPTION请求称为“预检请求”。

jsonp接口

1.获取客户端发送过来的回调函数的名字
2.得到要通过JSONP形式发送给客户端的数据
3.根据前两步得到的数据,拼接出一个函数调用的字符串
4.把上一步拼接得到的字符串,响应给客户端的

Avatar photo

By mwm

One thought on “node.js”

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注