• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

TypeError: Cannot read property 'passport' of undefined

21.09.27 23:14 작성 조회수 572

0

강사님 소스랑 똑같이 따라쳤는데

제목과 같은 에러가 납니다.

TypeError: Cannot read property 'passport' of undefined

    at SessionStrategy.authenticate (D:\z3-develope\slack-socket\backend\node_modules\passport\lib\strategies\session.js:51:18)

    at attempt (D:\z3-develope\slack-socket\backend\node_modules\passport\lib\middleware\authenticate.js:360:16)

    at authenticate (D:\z3-develope\slack-socket\backend\node_modules\passport\lib\middleware\authenticate.js:361:7)

    at Layer.handle [as handle_request] (D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\layer.js:95:5)

    at trim_prefix (D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\index.js:317:13)

    at D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\index.js:284:7

    at Function.process_params (D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\index.js:335:12)

    at next (D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\index.js:275:10)

    at initialize (D:\z3-develope\slack-socket\backend\node_modules\passport\lib\middleware\initialize.js:66:5)

    at Layer.handle [as handle_request] (D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\layer.js:95:5)

 

패스포트를 못읽어오는거 같은데

네스트 버그인가요? 저와같은 에러 나오시는분 계신가요?

 

이게 처음부터 이 에러가 아니라 아마, 저 에러로 인해서 

UnhandledPromiseRejectionWarning: TypeError: exception.getStatus is not a function

    at HttpExceptionFilter.catch (D:\z3-develope\slack-socket\backend\dist\main.js:2211:34)

    at ExceptionsHandler.invokeCustomFilters (D:\z3-develope\slack-socket\backend\node_modules\@nestjs\core\exceptions\exceptions-handler.js:33:26)

    at ExceptionsHandler.next (D:\z3-develope\slack-socket\backend\node_modules\@nestjs\core\exceptions\exceptions-handler.js:13:18)

    at D:\z3-develope\slack-socket\backend\node_modules\@nestjs\core\router\router-proxy.js:24:35

    at Layer.handle_error (D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\layer.js:71:5)

    at trim_prefix (D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\index.js:315:13)

    at D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\index.js:284:7

    at Function.process_params (D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\index.js:335:12)

    at next (D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\index.js:275:10)

    at Layer.handle_error (D:\z3-develope\slack-socket\backend\node_modules\express\lib\router\layer.js:67:12)

 

이 에러가 나는데 에러이셉션에서 에러를 가로채올때

이 에러같은 경우에는 스테이스를 가져올 수 없기때문에 바로 위 에러가 먼저나오고, 이셉션에서 에러 찍으면 제일 위에 있는 에러가 나옵니다.

내일 다시 해볼생각이긴 하지만

혹시 먼저 경험해보신분 계시면 해결방법 공유 부탁드립니다.

답변 4

·

답변을 작성해보세요.

0

main.ts에 아래 추가해주고 해결했습니다.

세션이 없어서 난 에러인데.. 신기하네요 다른분들은 괜찮았나요..??

import session from 'express-session';
app.use(session({secret: 'secret'}));

0

음 아직 화면이 없어서 포스트맨으로 보냈는데

에러메세지로 보아서는 패스포트를 못읽어오는게 문제인것같기는 하지만...

완벽하게 따라치지 못했을 가능성도 충분하니 좀 더 알아보겠습니다.

0

"esModuleInterop"true,

이구요,

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { SwaggerModuleDocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';
import { HttpExceptionFilter } from './httpException.filter';
import passport from 'passport';

이런식으로 임포트했습니다.

main.ts 전체코드는 

import { ValidationPipe } from '@nestjs/common';
import { NestFactory } from '@nestjs/core';
import { SwaggerModuleDocumentBuilder } from '@nestjs/swagger';
import { AppModule } from './app.module';
import { HttpExceptionFilter } from './httpException.filter';
import passport from 'passport';

const port = process.env.PORT || 5006;

declare const moduleany;

async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  app.useGlobalPipes(new ValidationPipe());
  app.useGlobalFilters(new HttpExceptionFilter());
  const config = new DocumentBuilder()
    .setTitle('slack-socket API')
    .setDescription('The slack-socket API description')
    .setVersion('1.0')
    .addTag('slack-socket')
    .build();
  
  const document = SwaggerModule.createDocument(appconfig);
  SwaggerModule.setup('api'appdocument);

  app.use(passport.initialize());
  app.use(passport.session());

  await app.listen(port);
  console.log(`server run in port ${port}`)

  if(module.hot) {
    module.hot.accept();
    module.hot.dispose(() => app.close());
  }

}
bootstrap();

입니다.

package.json

{
  "name""backend",
  "version""0.0.1",
  "description""",
  "author""",
  "private"true,
  "license""UNLICENSED",
  "scripts": {
    "prebuild""rimraf dist",
    "build""nest build",
    "format""prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start""nest start",
    "start:dev""nest start --watch",
    "start:debug""nest start --debug --watch",
    "start:prod""node dist/main",
    "dev""nest build --webpack --webpackPath webpack-hmr.config.js --watch",
    "lint""eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test""jest",
    "test:watch""jest --watch",
    "test:cov""jest --coverage",
    "test:debug""node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e""jest --config ./test/jest-e2e.json",
    "typeorm""node --require ts-node/register ./node_modules/typeorm/cli.js",
    "seed:config""ts-node ./node_modules/typeorm-seeding/dist/cli.js config",
    "seed:run""ts-node ./node_modules/typeorm-seeding/dist/cli.js seed",
    "schema:drop""ts-node ./node_modules/typeorm/cli.js schema:drop",
    "schema:sync""ts-node ./node_modules/typeorm/cli.js schema:sync",
    "db:migrate""npm run typeorm migration:run",
    "db:migrate:revert""npm run typeorm migration:revert",
    "db:create-migration""npm run typeorm migration:create -- -n",
    "db:generate-migration""npm run typeorm migration:generate -- -n"
  },
  "dependencies": {
    "@nestjs/common""^8.0.0",
    "@nestjs/config""^1.0.1",
    "@nestjs/core""^8.0.0",
    "@nestjs/passport""^8.0.1",
    "@nestjs/platform-express""^8.0.0",
    "@nestjs/swagger""^5.0.9",
    "@nestjs/typeorm""^8.0.2",
    "bcrypt""^5.0.1",
    "class-transformer""^0.4.0",
    "class-validator""^0.13.1",
    "mysql2""^2.3.0",
    "passport""^0.5.0",
    "passport-local""^1.0.0",
    "reflect-metadata""^0.1.13",
    "rimraf""^3.0.2",
    "rxjs""^7.2.0",
    "swagger-ui-express""^4.1.6",
    "typeorm""^0.2.37",
    "typeorm-seeding""^1.6.1"
  },
  "devDependencies": {
    "@nestjs/cli""^8.0.0",
    "@nestjs/schematics""^8.0.0",
    "@nestjs/testing""^8.0.0",
    "@types/express""^4.17.13",
    "@types/jest""^27.0.1",
    "@types/node""^16.0.0",
    "@types/passport-local""^1.0.34",
    "@types/supertest""^2.0.11",
    "@typescript-eslint/eslint-plugin""^4.28.2",
    "@typescript-eslint/parser""^4.28.2",
    "eslint""^7.30.0",
    "eslint-config-prettier""^8.3.0",
    "eslint-plugin-prettier""^3.4.0",
    "jest""^27.0.6",
    "prettier""^2.3.2",
    "run-script-webpack-plugin""0.0.11",
    "supertest""^6.1.3",
    "ts-jest""^27.0.3",
    "ts-loader""^9.2.3",
    "ts-node""^10.0.0",
    "tsconfig-paths""^3.10.1",
    "typescript""^4.3.5",
    "webpack""^5.53.0",
    "webpack-node-externals""^3.0.0"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir""src",
    "testRegex"".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$""ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory""../coverage",
    "testEnvironment""node"
  }
}

 

 

 

저게 로그인 시 발생하는 에러인가요? 로그인 라우터나 로컬가드 로컬시리얼라이저 등에서 오타가 난 것 같습니다. 모듈에서 프로바이더를 빠뜨리셨을 수도 있고요

0

tsconfig.json에 esModuleInterop true인가요? import는 어덯게 하셨나요?