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

김수민님의 프로필 이미지
김수민

작성한 질문수

Node.js에 TypeScript 적용하기(feat. NodeBird)

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

작성

·

828

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();
}
 

답변 1

0

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

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

김수민님의 프로필 이미지
김수민
질문자

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

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

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

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

김수민님의 프로필 이미지
김수민

작성한 질문수

질문하기