express.session не определено в машинописи - PullRequest
2 голосов
/ 16 октября 2019

Я очень новичок в машинописи / javascript, я пытаюсь создать бэкэнд остальных API с session следующим является app.ts файл

import express from "express";
import { applyMiddleware, applyRoutes } from "./utils";
import routes from "./services";

const app = express();

    var ses= {
        secret: "secret_session",
        resave: true,
        saveUninitialized: true,
        cookie: { maxAge: 3600000,secure: false, httpOnly: true
}
if (app.get('env') === 'production') {
    app.set('trust proxy', 1)
    ses.cookie.secure = true
}

app.use(session(ses));

applyRoutes(routes, app);

Я запустил сервери применил промежуточное ПО для error handling, но, на мой взгляд, оно не связано с вопросом, поэтому я не добавляю код для него. Ниже приведен мой код rout.ts , в котором я пытаюсь установить сеанс.

import { Request, Response } from "express";
import { getAll, getByKeyword, addNewProduct } from "./productControllers";
{
path: "/api/v1/getAllProducts",
method: "get",
handler: [
  (req: Request, res: Response) => {
    getAll()
      .then((row: any) => {
       var sess = req.session;
       sess.views = 1;
        res.status(200).json({ data: row });
      })
      .catch(err => {
        res.json({
          message: err
        });
      });
  }
]
}

Я получаю сообщение об ошибке по адресу sess.views = 1;

Я пытался ответить на предложенные вопросы, прежде чем задавать его, никто из них не помогмне.

РЕДАКТИРОВАТЬ: Я создал index.ts

import searchRoutes from "./products/routes";

export default [...searchRoutes];

У меня есть другой класс утилит

export const applyRoutes = (routes: Route[], router: Router) => {
  for (const route of routes) {
    const { method, path, handler } = route;
    (router as any)[method](path, handler);
  }
}

1 Ответ

1 голос
/ 16 октября 2019

Вы используете интерфейс Request для express.js. Но у него нет определения типа для session. Поэтому машинопись выдает ошибку компиляции. Для ее решения вам необходимо определить тип сеанса в интерфейсе запроса.

Вы можете определить файл session.d.ts в вашем проекте. И создавать необходимые типы и интерфейсы. Например:

declare global {
  namespace Express {
    interface Request {
      session?: Session;
      sessionID?: string;
    }
  }
}

interface Session{
  mySessionVarible:string
}

Но хорошо, что у нас есть проект DefinitilyTyped, в котором вы можете найти множество определений типов. Это должно решить вашу проблему компиляции.

npm install --save-dev @types/express-session

И не забудьте изменить импорт для запроса.

import { Request, Response } from "@types/express-session";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...