挂屏笔记 复习 node.js
nodejs模块化
模块分类:
内置模块,自定义模块(需要补全路径),第三方模块require('加载模块时会执行被加载的代码')nodejs 模块化具有模块作用域,不能直接访问被引入模块内的变量自定义模块中有module对象,可通过module.exports 可以向外共享成员 自定义模块中有exports对象,默认和module.exports指向同一对象,require() 得到的永远是 module.exports
commonjs规范:
每个模块内部,module变量代表当前模块module变量是一个对象,它的expor属性(即module.exports)是对外的接口。require 一个模块,其实是加载该模块的 module.expoorts属性。
三个内置模块
file 模块
载入模块
let fs=require('fs')用来读取指定文件中的内容
fs.readFile('./test.text1','utf8',(err,satastr)=>{console.log(satastr)})用来向指定的文件中写入内容
fs.wirteFile('./file.txt','要写入的str','可以省略,默认utf8',(err)=>{})path 模块
载入模块
let path=requeire('path')文件所在的路径
console.log(__dirname)路径拼接
path.join('url片段1','URL片段2...')完整的文件名
path.basename(fpath)去掉扩展名的文件名
path.basename(fpath,'.html')文件的扩展名
path.extname(fpath)http 模块
载入模块
let http=require('http')创建实例
let server=http.createServer()为服务器实例绑定request事件,监听客户端的请求
server.on('request',function(req,res){
    // 客户端请求的url地址
    console.log(req.url)
    // 客户端请求的类型
    console.log(req.method)
    // 设置响应头:示例为解决返回中文编码问题
    res.setHeader('Content-Type','text/html:charset=utf-8')
    // 向客户端返回一些内容并结束本次请求
    res.end('欢迎访问')
})启动服务器
server.listen(80,()=>{console.log('服务器启动了:http://127.0.0.1')})nodemon
自动重启服务,开发期间修改了代码不需要手动重启
npm install -gnodemon使用nodemon filename.js命令替代node File.js命令来启动服务
express
基于nodejs,快速,开放,极简的web开发框架(基于http模块)
npm i express@4.17.1先简单创建并启动一个服务
导入express
const express = require('express')创建服务器实例
const app = express()监听get请求
app.get('/user',(req,res)=>{})监听post请求
app.post('/user',(req,res)=>{})调用 app.listen(端口号,启动成功后的回调函数)启动服务
app.listen(80,()=>{})具体配置req请求体与res响应体
获取url后面用问号拼接的参数,默认是个空对象
console.log(req.query)获取url后面的动态参数(冒号占位),如:app.get('/user/:id',(req,res)=>{})http://127.0.0.1:80/user/22145获取的就是22145部分
console.log(req.params)常见请求体内容格式,可直接通过已有中间件后获取json 格式要经过内置中间件app.use(express.json()) url-encoded 格式要经过内置中间件app.use(ecpress.urlexcoded({extended:false}))
console.log(req.body)如果没有配置对应的中间件,则req.body值就是 undefined 。或者也可以通过data,end事件获取其他类型数据,数据量大时可能会触发多次data,每次获取完整数据的一部分
req.on('data',(chunk)=>{console.log('chunk是本次接受的数据')})
req.on('end',()=>{console.log('数据接收完成了')})经过data,与end事件获取并拼接出查询字符串后,可以用内置的querystring模块,来处理查询字符串,通过这个模块的parse()函数,把查询字符串解析成对象格式
const body=require('querystring').parse('str')响应内容
res.send({name:'悟空',age:18,gender:'男'})三个内置中间件
解析json 格式数据
app.use(express.json())解析 URL-encoded 格式数据
app.use(express.urlencoded({extended:false}))加载静态资源
app.use(express.static('资源路径'))
app.use('URl前缀:/public',express.static('资源路径'))自定义中间件
中间件回调函数参数中多一个next参数,且在函数体最后必须调用next()全局中间件
app.get((req,res,next)=>{next()})局部中间件
app.get(
    "/user",
    [
        //需要配置多个可以通过数组的形式实现
        (req,res,next)=>{next()},
        (req,res,next)=>{next()}
    ],
    (req,res)=>{}
    )错误级别中间件,回调函数中多一个err 参数,可以捕获请求过程中发生的错误,防止程序崩溃注意!!! 错误级别中间件要注册在所有的路由后面
app.use((err,req,res,next)=>{next()})自定义路由模块
自定义路由模块可以将请求抽离分门别来的抽离出来,便于管理
const express = require('express')
const apiRouter = express.Router()
// 监听get请求示例
apiRouter.get('/',(req,res)=>{})
module.exports=apiRouter加载路由模块
add.use(require('./router')) 
add.use('URl前缀:/api',require('./router')) cors实现跨域配置
安装 cors 后可通过引人中间件的方式引入到代码中
npm install cors 
const cors=require("cors")要在调用路由之前
app.use('URL前缀',cors())自定义响应头实现跨域配置
CORS 响应头 Access-Control-Allow-Origin 允许访问的地址
res.setHeader('Access-Control-Allow-Origin','允许跨域访问的 URL,可以写通配符*')CORS 响应头 Access-Control-Allow-Methods 默认仅支持 GET,PODST,HEAD 请求
res.setHeader('Access-Control-Allow-Methods','*')转载自:https://segmentfault.com/a/1190000043561448