【发布时间】:2021-07-01 06:17:51
【问题描述】:
我有一个中间件,可以在让用户访问路由之前检查用户是否已登录。它看起来像这样:
import { Request, Response, NextFunction } from "express";
import jwt from "jsonwebtoken";
const authenticate = (req: Authenticate, res: Response, next: NextFunction) => {
const token = req.cookies;
if (token) {
jwt.verify(token, process.env.JWT_TOKEN_KEY, (error, res) => {
if (error) return res.sendStatus(403);
req.cookie = { _id: res._id, locale: res.locale };
return next();
});
}
return res.sendStatus(401);
};
export default authenticate;
测试是:
import chai from "chai";
import chaiHttp from "chai-http";
import { server } from "../index";
chai.use(chaiHttp);
const api = chai.request(server).keepOpen();
describe("GET /user/:id", () => {
it("return user information", () => {
api
.get("/user/123")
.set("Cookie", "_id=567;locale=en")
.end(function (err, res) {
chai.expect(res).to.have.status(200);
});
});
});
如果我从路由中删除中间件,测试工作正常。所以:
// OK
router.post("/user/:id", searchUser);
// NOT OK
router.post("/user/:id", authenticate, searchUser);
错误是:
TypeError:无法读取未定义的属性“sendStatus” 在 /Users/myname/Desktop/Code/myapp/server/src/middleware/authenticate.ts:21:29 在 Object.module.exports [作为验证] (/Users/myname/Desktop/Code/myapp/server/node_modules /jsonwebtoken/verify.js:57:12)
【问题讨论】:
标签: node.js express cookies jwt chai