背景

使用 Express 中间件进行数据代理方法,用户信息统一使用 Redis 缓存

  • user-redis
const user_redis = async function (req, res, next) {
    const token = req.headers['authorization']
    const user = await redis.client.getAsync(token).then((data) => {
        return data
    })
    // 给 header 添加用户信息,结果抛下面异常
    req.headers.user_info = user
    next()
}

异常信息

TypeError [ERR_INVALID_CHAR]: Invalid character in header content ["user_info"]
    at ClientRequest.setHeader (_http_outgoing.js:473:3)
    at new ClientRequest (_http_client.js:193:14)
    ......

解决方法

参考:

https://github/expressjs/express/issues/3401

将 user 信息进行 base64 编码后,在应用层进行解码即可;

  • user_redis
const user_redis = async function (req, res, next) {
    const token = req.headers['authorization']
    const user = await redis.client.getAsync(token).then((data) => {
        return data
    })
    // 给 header 添加用户信息,结果抛下面异常
    req.headers.user_info = Buffer.from(user).toString('base64')
    next()
}
  • application
const user_str = req.headers.user_info
const userInfo = Buffer.from(user_str,'base64').toString()

更多推荐

NodeJs - Express 中间件修改 Header: TypeError [ERR_INVALID_CHAR]: Invalid character i