Я использую express.js. У меня есть приложение с двумя контроллерами для обработки запросов: / auth & / posts
Я добавил авторизацию токена для установки куки авторизации.
Проблема в том, что когда я делаю запрос к /после этого запрос проходит через authMiddleware, который пытается проверить cookie, но не может получить к нему доступ, потому что свойство «cookie» не существует в request.header, несмотря на то, что я отправляю cookie через.
Еще более странно то, чтоон прекрасно работает, когда я делаю запрос по маршруту / auth, в этом случае request.header.cookie заполняется соответствующим образом.
Контроллеры для обоих маршрутов не сильно отличаются, они в значительной степени следуют одному и тому жеформат со свойством path и конструктором, который инициализирует маршруты
class PostsController implements Controller {
public path = '/posts';
public router = express.Router();
constructor() {
this.initializeRoutes();
}
public initializeRoutes() {
this.router.get(this.path, this.getAllPosts);
this.router.get(this.path + '/:id', this.getPostById);
this.router.all(this.path + '/*', authMiddleware)
.patch(this.path + '/:id', this.updatePostById)
.delete(this.path + '/:id', this.deletePostById);
this.router.post(this.path, authMiddleware, this.createAPost);
}
class AuthenticationController implements Controller {
public path = '/auth';
public router = express.Router();
private user = userModel;
constructor() {
this.initializeRoutes();
}
private initializeRoutes() {
this.router.post(`${this.path}/register`, this.registration);
this.router.post(`${this.path}/login`, this.login);
}
private initializeMiddlewares() {
this.app.use('/*', (req, res, next) => {
console.log(req.headers); // returns headers with cookie for /auth only
const cookies = req.headers.cookie.split(';'); // fails here on /posts
const parsedCookies = {};
cookies.forEach( pair => {
const key = pair.split('=')[0];
const value = pair.split('=')[1];
if(key && value){
parsedCookies[key] = value;
}
})
req.cookies = parsedCookies;
console.log(req.cookies);
next();
})
this.app.use(bodyParser.json());
}
Конечно, я хотел бы получить доступ к свойству cookie независимо от маршрута.
Я даже пытался не использовать ни один из контроллеров, но эта проблема сохраняется, кажется, что она связана исключительно с маршрутом, который я делаюравнозначно тому, что на самом деле не имеет особого смысла для меня.