강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

특별한 지렁이님의 프로필 이미지
특별한 지렁이

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

local serializer, guard

TypeError: Cannot read property 'passport' of undefined

작성

·

743

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)

 

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

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

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

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

퀴즈

NestJS에서 Guard의 주요 역할은 무엇인가요?

데이터 유효성 검사

서비스 로직 실행

예외 처리

권한 및 인증 확인

답변 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는 어덯게 하셨나요?

특별한 지렁이님의 프로필 이미지
특별한 지렁이

작성한 질문수

질문하기