• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

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

22.01.13 15:05 작성 조회수 694

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 타이핑 추가 하셨나요?

김수민님의 프로필

김수민

질문자

2022.01.13

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

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

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