nodejs+express接口全局拦截和环境变量设置

本文介绍了如何在Node.js项目中实现接口全局拦截,检查`validate_token`cookie,以及如何通过`package.json`设置环境变量,包括在不同环境下的URL配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

本例中必须安装的依赖包有:expresscookie-parser(可以没有)

1. 接口全局拦截

  1. 新建一个文件intercept.ts,编写拦截过程
import express from "express";
import cookieParser from 'cookie-parser'

const ssoRouter = express.Router()

ssoRouter.use(cookieParser())

ssoRouter.all('/*', function(req:any, res:any, next:any) {
    let validate_token = req.cookies?.validate_token
    if(validate_token) {
        next()
    } else {
        // do something 可以是重定向等
        res.send()
    }
})

export default ssoRouter

注册一个全局的.all('/*')接口,进行全局拦截。这里面可以写任意你需要进行权限校验、参数校验等的方法。校验正确就会继续执行,校验出现错误就会按照你所设定的方法执行。

  1. 项目启动文件app.ts中引入该文件,并注册到app中
import express from 'express'
const app = express()

import interceptRouter from './router/intercept'

app.use(interceptRouter )

3. 环境变量设置

这里主要指在nodejs后台项目中设置环境变量。设置方法为:在package.json文件中,在script标签中的启动命令后面添加et NODE_ENV=development,如:

{
  "name": "name",
  "version": "1.0.0",
  "description": "",
  "scripts": {
    "dev:live": "set NODE_ENV=development && nodemon ./src/app.ts"
  },
}

运行npm run dev:live命令,环境变量就可以生效。你可以可以设置将NODE_ENV改为其它的值或其它的变量名做尝试。

在nodejs后台项目中,获取环境变量的方法可以通过process.env.NODE_ENV获取。如:

const env = process.env.NODE_ENV as string
const envUrl:Record<string,string> = {
    'production': 'https://xxx.com/#/index',
    'development': 'https://xxx-dev.com/#/index',
    'test': 'https://xxx-sit.com/#/index'
}
let redirectUrl = encodeURIComponent(envUrl[env.trim()])

如上,通过process.env.NODE_ENV获取了环境变量,并赋值给env变量;envUrl中定义了三种环境下的系统访问地址,包括production、development和test;通过encodeURIComponent(envUrl[env.trim()])对系统地址编码。注意:

  • env一定要调用.trim()方法去掉前后空格,我就是因为没有去空格一直从对象种获取不到正确的值,调试了好久…
  • 取到的地址一定要使用encodeURIComponent编码,否则浏览器直接访问会丢掉后面的路径。我也在这里碰到了巨坑~~
### Node.js Express 错误解决方法 当遇到Node.js Express框架中的错误时,可以采取多种策略来诊断并解决问题。 #### 日志记录 为了更好地理解程序运行期间发生的事件,在代码中加入详细的日志可以帮助定位问题所在。例如: ```javascript const express = require('express'); const app = express(); // 使用内置的日志中间件morgan来打印HTTP请求信息 app.use(require('morgan')('combined')); app.get('/', (req, res) => { try { // 可能会抛出异常的操作 throw new Error("模拟一个错误"); } catch (err) { console.error(err.stack); // 打印堆栈跟踪到控制台 res.status(500).send({ message: err.message }); } }); app.listen(3000, () => { console.log('Server is running on port 3000'); }); ``` 通过这种方式可以在发生未处理的异常时捕获它们,并向客户端返回适当的状态码消息[^1]。 #### 中间件错误处理器 Express允许定义专门用于捕捉所有层面上产生的错误的中间件函数。这种类型的中间件接收四个参数而不是通常的三个(即`err`, `req`, `res`, `next`),这使得它能够作为最后的安全网来拦截任何上游组件未能妥善处理的错误。 ```javascript // 自定义全局错误处理器 app.use((err, req, res, next) => { console.error(err.stack); res.status(500).json({ status: 'error', message: err.message, }); }); ``` 此设置确保即使是在异步操作之后发生的错误也能得到恰当处理[^2]。 #### 调试工具 对于更复杂的调试需求,还可以利用像[node-inspector](https://github.com/nodejs/debugger-v8)这样的外部库来进行实时断点调试;或是采用专业的性能分析器如[New Relic](https://newrelic.com/)监控应用的表现情况以及发现潜在瓶颈。 #### 文档与社区支持 查阅官方文档总是解决问题的好起点。此外,活跃的技术交流平台如Stack Overflow也提供了大量由开发者分享的实际案例及其对应的修复方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值