inflearn logo
강의

Course

Instructor

Applying TypeScript to Node.js (feat. NodeBird)

roperty 'id' does not exist on type 'User'.

891

minsu

27 asked

0

안녕하세요 제로초님,
node Ts 공부를 하고 있습니다.
 
다름이 아니라 여기 코드에서 req.user.id 부분에서 자꾸 에러가 발생합니다.
왜 발생하는 지 모르겠네요.
type update 되고 오류가 나는 것 인지..
 
passport 에서도 별 문제가 없는 거 같은데.
 
    return new TSError(diagnosticText, diagnosticCodes);
TSError: ⨯ Unable to compile TypeScript:
routes/user.ts:120:32 - error TS2339: Property 'id' does not exist on type 'User'.
120         where: { id: req.user!.id },
 
 
 
 
// router/user
router.patch('/username', isLoggedIn, async (req, res, next) => {
try {
await User.update({
username: req.body.username,
}, {
where: { id: req.user!.id }, // Error
});
res.send(req.body.username);
} catch (e) {
console.error(e);
next(e);
}
});
 
 
// models user.ts
class User extends Model {
public id!: number;
public nickname!: string;
public userId!: string;
public password!: string;
public readonly createdAt!: Date;
public readonly updatedAt!: Date;
}
 
// passport index.ts
import passport from 'passport';
import User from '../models/user';
import local from './local';

export default () => {
// serializerUser 메서드를 사용하여 사용자 정보를 Session에 저장할 수 있습니다.
// session에 저장할 정보 done(null,user) 과 같이 두번쨰 인자로 넘기면 됩니다.
// passport.serializeUser((user: User, done: any) => done(null, user.id));
passport.serializeUser((user: any, done) => {
done(null, user.id)
});

// 로그인 되어 있을 경우 모든 사용자 페이지를 접근할 경우.
// deserializeUser 가 발생합니다. -> session에 저장된 값을 이용해.
// 사용자 Profile 찾은 후, HTTP Request 리턴합니다.
passport.deserializeUser<number>(async (id: number, done) => {
try {
const user = await User.findOne({
where: { id },
});
return done(null, user); // req.user
} catch (err) {
console.error(err);
return done(err);
}
});
 
local();
}
 

typescript nodejs 웹앱

Answer 1

0

zerocho

types 폴더에서 express 관련 req.user 타이핑 추가 하셨나요?

0

minsu

아녀.. 완성본 back types  파일 보니까 req.user 타이핑 안하시고, 타이핑 없이  req.user!.id 사용하셔서 제가 뭐 잘못 코드 짯나 생각했습니다. 혹시 req.user 타이핑 어떻게 해야 하는 지 알려주실 수 있으세요??

0

zerocho

https://github.com/ZeroCho/ts-nodebird/blob/master/ch3/back/types/express/index.d.ts

여기처럼 폴더 만들고 하셔야 합니다.

'S3' 형식에 'S3Client' 형식의 destroy, middlewareStack, send 속성이 없습니다.ts(2739)

0

505

1

throw new Error(&amp;#x60;${this.name}.hasMany called with something that&amp;#x27;s not a subclass of Sequelize.Model&amp;#x60;); 에러 질문

0

342

1

안녕하세요.. connect ECONNREFUSED 127.0.0.1:3306 관련해서 질문드립니다

0

955

1

@types를 dependencies에 넣는 이유?

0

398

1

JS에서 babel 사용시 `import * as` 구문을 안써도되는데, 바벨이 esModuleInterop: true 로 처리해주는 것인가요?

0

318

1

Sequelize Association 오류

0

501

2

Sequelize constructor.primaryKeyAttributes 오류

0

959

1

Sequelize에 요청을 보내면 오류가 뜹니다

0

793

1

강좌에서 사용된 3개의 코드 의미가 궁금합니다 [ 코드 : 1. [ key:string]:string] 2. delete user.password , 3.passport.deserializeUser<number> ]

0

337

1

@mui/x-data-grid 에 사용자정의 컬럼 타입을 추가해서 사용하려고 합니다.

0

2608

1

미들웨어 에러

1

312

1

Could not find a declaration file for mould '../utils/jwt-utils'

1

179

1

마지막에 type과 interface 추가하는 부분

0

217

1

다른 컴퓨터에서 제가 만든 DB 테이블의 데이터를 그대로 사용하려면?

0

282

1

express 모듈 에러 관련

0

236

1

import * as A from 'B'

0

212

1

MySql ssl 보안 옵션 질문 입니다.

0

351

2

passport/index.ts 에러 입니다

1

450

1

routes/post.ts 페이지에서 에러나요..

0

313

1

passport/index.ts 에러납니다...

0

816

1

ts import 에러

0

439

1

타입스크립트로 변환후 nextjs 빌드 후 배포

0

258

1

sequelize include 질문드립니다.!

0

186

1

passport user.id 질문드립니다.

0

199

1