typescript下给express中的Reqeust添加一个属性并赋值不能在各接口中共用?

代码如下,一个是登陆接口getAdmin,一个是拿登录用户详细信息的接口getAdminInfo,我在登录接口用了代码req['user']=posts用把用户的基本信息弄到req也就是Request请求里面,这样我在其中接口可以直接用,但是在typescript确怎么也拿不到值。。这是为什么 ???在getAdminInfo接口用console.log(req['user'])值为undefined。

import {NextFunction, Request, Response} from "express";
import {getManager} from "typeorm";
import {Admin} from "../entity/Admin";
import jwt from "../util/jwt"
import config from '../config/config.default'
import {md5} from "../util/md5";

export async function getAdminInfo(req:Request,res:Response,next:NextFunction){
    console.log(req['user'])
    try {
        let user={
            nickname:null,
            avator:null,
            roles:["ADMIN"],
            perms:null
        }
        res.status(200).json({
            code:0,
            data:user,
            msg:"登录成功"
        })
    }catch (err){
        next(err)
    }
}

export async function getAdmin(req: Request, res: Response, next: Function){
    try{
        let data=req.body
        if(!data.username || !data.password){
            res.send("用户名或密码不能为空")
        }
        const postRepository = getManager().getRepository(Admin);
        // load posts
        const posts = await postRepository.findOne({username:data.username});
        if(!posts){
            res.send("该用户不存在")
        }
        if(md5(data.password)!==posts.password){
            res.send("密码输入不正确")
        }
        posts.token=await jwt.sign(
            {id:posts.id},
            config.jwtSecret,
            {expiresIn:1800}
        )
        await postRepository.save(posts)
        // console.log(token)
        // return loaded posts
        delete  posts.password
        req['user']=posts
        res.status(200).json({
            'code':0,
            "data":posts,
            "msg":"登录成功"
        })
    }catch (e) {
        next(e)
    }
}

阅读 1.7k
1 个回答

你这思路有问题吧,你既然已经用了jwt 了,为什么还要保存用户信息,jwt 就是解决登录状态的。

再说 req 是请求对象,所有的用户多会调用,一个用户登录了,req 下面的post 修改了,下一个用户再登录,不就把上一个用户的 user posts 对象覆盖了吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进