华清远见重庆中心—Node.js个人总结

文章展示了如何使用Express创建服务器,包括定义GET接口,处理跨域请求以及运用中间件进行异常处理。示例代码解释了app.get方法、cors中间件的使用以及asyncHandler函数在捕获异步错误中的作用。
摘要由CSDN通过智能技术生成

express服务器

const express = require("express");//引入express模块
const app = express();//创建服务器应用程序对象
const port=80

//注册接口
//接口:网络接口,一个url路径,对应服务器上一个提供服务的功能,这个功能加上服务器上的一个接口
//第一个参数:url
//第二个参数:接口回调
app.get('/greeting',(req, res)=>{
    res.end("hello world")
})

app.get('/6969',(req,res)=>{
    res.setHeader('Content-Type', 'text/plain;charset=utf-8')
    res.write(`本地ip: ${req.socket.localAddress}\n`) // 当前服务器ip地址
    res.write(`本地port: ${req.socket.localPort}\n`) // 当前服务器端口号
    // remote 远程: 指的就是客户端
    res.write(`远程ip: ${req.socket.remoteAddress}\n`) // 远程ip
    res.write(`远程port: ${req.socket.remotePort}\n`) // 远程端口号
    res.write("ok")
    res.end("成功访问1111111")
})

//启动服务器
app.listen(port,()=>{
    console.log("server start on:http://127.0.0.1")
})

服务器的跨越处理

const express = require('express');
const cors = require('cors')
const path = require("path");
const app = express()


//若不记得,可以使用cors包
// app.use(cors())

// 添加一个中间件拦截所有请求
// app.all('*', (req, res, next) => {
//     // 设置允许跨域的响应头
//     res.setHeader('Access-Control-Allow-Origin', '*')
//     res.setHeader('Access-Control-Allow-Methods', '*')
//     res.setHeader('Access-Control-Allow-Headers', 'Content-Type')
//     next()
// })

app.use('/', express.static(path.join(__dirname, 'public')))

app.get('/test', (req, res) => {
    res.json({msg: 'ok'})
})

app.get('/jsonp', (req, res) => {
    // const {callback} = req.query
    // res.setHeader('Content-Type', 'text/javascript')
    // const params = {x: 1, y: 2}
    // res.send(`${callback}('${JSON.stringify(params)}')`)

    res.jsonp({x: 1, y: 2})
})

app.listen(80, () => {
    console.log(`start on: http://127.0.0.1`)
})

中间件和异常处理

const express = require('express');
const ah = require('express-async-handler')
const app = express();


// 若不记得异步处理器该如何写的话,可以安装 express-async-handler 包来代替

// 异步处理器
// 用于捕获异步函数中的异常
// asyncFunction 是一个异步方法
function asyncHandler(asyncFunction) {
    // 返回一个接口函数
    return (req, res, next) => {
        asyncFunction(req, res).catch(next)
    }
}


// 声明中间件
app.use((req, res, next) => {
    // req, res 就是接口中的请求对象和响应对象
    // next 函数在中间件中必须调用
    // 调用next有两种情况
    // 情况一: 不带参数的调用
    // 含义: 放行
    console.log('中间件1')
    next()
    // 情况二: 带参数
    // 含义: 直接将参数返回给页面
    // next(new Error(`这是next返回给页面的内容,强制被认为是异常,所以状态码为500`))
})

// app.get('/test1', async (req, res, next) => {
//     // 接口中的next作用和中间件中一样,但是接口中的next必须传参数
//     // next(new Error('test1 error'))
//     // 接口内抛出的异常也能被最后个中间件捕获
//     // throw new Error('test1 error')
//     res.json({msg: 1})
// })

// app.get('/test1', asyncHandler(async (req, res) => {
app.get('/test1', ah(async (req, res) => {
    throw new Error('test1 error')
    res.json({msg: 1})
}))

app.use((req, res, next) => {
    console.log('中间件2')
    next()
})

app.get('/test2', (req, res, next) => {
    console.log(abc)
    res.json({msg: 2})
})

app.use((req, res, next) => {
    console.log('中间件3')
    next()
})

app.get('/test3', (req, res) => {
    res.json({msg: 3})
})

// 在所有中间件的末尾,添加一个异常处理的中间件
// 此异常捕获中间件参数必须以 err 开头
// 此中间件的触发条件有:
// 1. 任意接口抛出异常
// 2. 任意接口或中间件的next调用后传了参数
app.use((err, req, res, next) => {
    // 打印异常
    console.error(err)
    res.json({success: false, msg: err.message})
    // next(err)
})

app.listen(80, () => {
    console.log('server start on: http://127.0.0.1')
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值