前言:
本例中必须安装的依赖包有:express
、cookie-parser
(可以没有)
1. 接口全局拦截
- 新建一个文件intercept.ts,编写拦截过程
javascript
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('/*')
接口,进行全局拦截。这里面可以写任意你需要进行权限校验、参数校验等的方法。校验正确就会继续执行,校验出现错误就会按照你所设定的方法执行。
- 项目启动文件app.ts中引入该文件,并注册到app中
javascript
import express from 'express'
const app = express()
import interceptRouter from './router/intercept'
app.use(interceptRouter )
3. 环境变量设置
这里主要指在nodejs后台项目中设置环境变量。设置方法为:在package.json
文件中,在script
标签中的启动命令后面添加et NODE_ENV=development
,如:
javascript
{
"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
获取。如:
javascript
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
编码,否则浏览器直接访问会丢掉后面的路径。我也在这里碰到了巨坑~~