29,700원
다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
시퀄라이즈 논리연산자 처리방식 질문
where:{id:parseInt(req.params.id,10)||(req.user&&req.user.id)||0} 논리연산자 부분이 뭔가 부자연스러워서 한참을 생각해봤는데, 이것은 시퀄라이즈가 where 내부에 논리연산자 관련 처리를 해놓지 않았다면, :id 가 숫자이기만 하면 항상 req.params.id인 유저를 찾게되는 하나의 명령어인 것 같습니다. 그러나 저 코드의 의도는 findOne(where:{id:req.params})를 해보고, 없다면 findOne(where:{id:(req.user&&req.user.id})를 해보고, 또 없다면 findOne(where:{id:0})을 최후의 수단으로 해라가 맞는 것 같습니다. 예를 들어 DB에 회원이 1명만 있다 가정하고, GET /100/followings 요청을 보낸다고 생각해볼 때, 논리연산식에 따르면 where:{id:100}인 findOne명령이 한 번 실행되고 끝이 아닌가요? where 내부에서 논리연산식을 사용하면 그에 맞게 시퀄라이즈가 똑똑하게 findOne 요청을 적절하게 여러번 보내게 되는건가요?
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
delete 피연산자 문제
router.get('/',isLoggedIn,(req,res)=>{ const user = req.user!.toJSON() as User; delete user.password; return res.json(user); }); 'delete' 연산자의 피연산자는 선택사항이어야 합니다. ts(2790) 위 코드에서 user.password 빨간줄 뜨길래 보니까 user.password가 User에서 public password!: String 이어서 지울수 없는 것 같습니다. 모델을 수정해야하나요? 제로초님 IDE에서는 빨간줄이 안 뜨는데 어떤 식으로 해야할지 감이 안 잡히네유ㅠ
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
서버 개발을 할 때 java, c#같은 강타입 언어를 쓰는 것보다 타입스크립트를 쓰는 것의 장점이 있을까요?
서버 개발에 타입스크립트를 쓰면 자바스크립트를 쓸 때보다 안정적인 서버를 구축할 수 있다는 부분에서 강의 내용과는 크게 관련이 없지만 위의 내용이 궁금해져서요^^;; 실무에서 강타입 언어인 java나 c#같은 정적 언어들로 서버를 개발하는 것보다 동적 언어인 자바스크립트에 타입을 강화하는 타입스크립트를 더해 개발할 때 이점이 무엇인지 궁금합니다. 찾아보니 다양한 의견이 있던데 서버 안정성이 최우선이라면 강타입 언어인 정적 언어로 서버를 구축하는 편이고, 서버의 확장성이 우선이라면 동적 언어를 사용하는 편이라고 이해해도 무리가 없을까요? 참고로 저는 자바스크립트를 첫 개발언어로 배워서 다른 정적언어의 특성들을 잘 모릅니다... 이 부분에 대해서 제로초님은 어떻게 생각하시는지 궁금해서 질문을 올립니다.
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
혹시 localStorage는 언제 사용하나요?
강의를 들으면서 작성한 코드를 실행해보다가 세션 스토리지와 로컬 스토리지를 보게 되었는데요. 세션스토리지가 세션을 저장하기 위해서 사용되는 것은 알겠는데, 혹시 로컬 스토리지는 현업에서 어떤 경우에 사용되는지 혹시 좀 이야기해주실 수 있을까요? 혹시나 해서 Node.js 교과서 책에도 찾아봤는데 안 나오고 구글링해보니 되도록이면 안 쓰는 게 좋다는 이야기가 꽤 나오는 것 같은데 혹시 제로초님은 써보신 적이 있으신가요?
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
user 라우터 관련 질문
router.get('/:id/posts', async (req, res, next) => { try { const posts = await Post.findAll({ where: { UserID: parseInt(req.params.id, 10) || (req.user && req.user.id) || 0, // 특정 사람의 게시글 RetweetId: null, }, include: [{ model: User, attributes: ['id', 'nickname'], }, { model: Image, }, { model: User, as: 'Likers', attributes: ['id'] }] }); res.json(posts); } catch (err) { console.error(err); next(err); } }) 제로초님 안녕하세요. 위의 코드에서 posts의 where절 조건 설정하는 부분이 조금 잘 이해가 되지 않는데요. 특정 사람의 게시글을 가져오거나 로그인한 사용자가 쓴 게시글을 가져오거나 혹은 아무 것도 가져오지 않는 경우로 이해하고 있는데, 0을 붙이는 것은 에러를 처리하는 경우로 이해할 수 있겠는데, 자기 글을 가져오는 것은 어떻게 되는 것인가요? path가 /user/posts인 경우 이 라우터에서 id가 없는 경우로 처리하는 것으로 보면 될까요?
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
ambient module을 활용한 타입 문제 해결시 문제가 발생합니다.
제로초님 안녕하세요. 영상에서 해결해주신 대로 타입문제를 해결하고 있는데요. 그런데 tsconfig.json을 아래처럼 { "compilerOptions": { "strict": true, "lib": ["es2015", "es2016", "es2017", "es2018", "es2019", "es2020"], "moduleResolution": "node", "typeRoots": ["./types"] }, "files": ["./index.ts"] } files에 index.ts를 넣으면 같은 에러가 발생합니다. 그리고 저 부분을 제외하면 router.get('/', isLoggedIn, (req , res) => { const user = req.user!.toJSON() as User; delete user.password; return res.json(user); } ) 위의 코드에서 req.user!.tsJSON()에서는 문제가 안 생기는데, 대신에 delete 다음에 오는 user.password 부분에 "The operand of a 'delete' operator must be optional." 이라는 에러가 뜹니다. 저 user.password의 type definition을 보면 public User.password: string 이라고 나오는데, 모델을 정의하는 부분에서는 password 뒤에 !를 붙였고, User.init 함수 안에서도 alowNull을 false로 설정해서 optional이 올 필요가 없어보이는데도 그렇네요. 강의 중에는 그런 문제가 안 나오는 것 같던데, 혹시 타입스크립트 버전 차이 때문에 그런 것일까요? 현재 4.2.4 버전 사용 중입니다.
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
passport.ts 작성 시, serializeUser에서의 에러
제목과 같이 serializeUser를 강의와 같이 작성시 아래와 같은 에러가 발생합니다. 해당 에러를 해석 했을 때, serializeUser의 함수 정의는 Express.User로 되어 있는 것 같습니다. No overload matches this call. Overload 1 of 2, '(fn: (user: User, done: (err: any, id?: unknown) => void) => void): void', gave the following error. Argument of type '(user: import("c:/Users/shinj/Desktop/nodebird/back/models/user").default, done: (err: any, id?: unknown) => void) => void' is not assignable to parameter of type '(user: Express.User, done: (err: any, id?: unknown) => void) => void'. Types of parameters 'user' and 'user' are incompatible. Type 'User' is missing the following properties from type 'User': id, nickname, userId, password, and 31 more. Overload 2 of 2, '(fn: (req: IncomingMessage, user: User, done: (err: any, id?: unknown) => void) => void): void', gave the following error. Argument of type '(user: User, done: (err: any, id?: unknown) => void) => void' is not assignable to parameter of type '(req: IncomingMessage, user: User, done: (err: any, id?: unknown) => void) => void'. Types of parameters 'user' and 'req' are incompatible. Type 'IncomingMessage' is missing the following properties from type 'User': id, nickname, userId, password, and 30 more.ts(2769) 강의 때 만든 models/user를 사용하기 위해서는 어떻게 해야하나요? github에 올라온 자료를 참고하면 해당 코드를 아래와 같이 풀어 가셨던데, 아래 코드로 작성해도 에러가 나서 문의 드립니다.
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
시퀄라이즈를 사용하지 않은 서버에 시퀄라이즈적용
시퀄라이즈를 적용하지 않고 nodejs와 mysql을 사용하여 서버를 구축한 상황에서 ts와 시퀄라이즈를 적용하기 위해서는 기존Table의 값들 똑같이 Model에 작성해줘야 하는 건가요? 혹은 기존의 DB를 땡겨 올 수 있는 방법이 있나요?
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
Serialize 공지사항대로 해봤는데 에러가 납니다.
passport/index.ts 에서 다음과 같은 에러가 납니다. 관련 코드들입니다. models/user.ts 입니다. types/index.d.ts 입니다. types/index.ts 입니다 ts 는 버전마다 신경쓸것도 많고 타입 재정의를 해야할게 많아서 어렵네요 ㅠㅠ
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
시퀄라이즈 질문입니다
보통 시퀄라이즈 N:M 관계에서 through로 관계를 설정하면 자동으로 만들어지는 테이블에 제가 원하는 칼럼이 추가 가능한가요?? 아니면 그냥 N:M 관계이지만 중간테이블을 제가 생성해서 hasmany, belongs to로 관계를 설정해줘야 할까요?? 찾아봐도 잘 모르겠어서 질문 드립니다 ㅜ
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
타입스크립트 에러
models/user.ts 에서 User class 를 default export 하고 불러와서 타입에 할당했는데 다음과 같은 에러가 나타납니다. 혹시 이런에러가 나타났을때 해결을 어떻게해야할까요? (alias) class Userimport User No overload matches this call.Overload 1 of 2, '(fn: (user: User, done: (err: any, id?: unknown) => void) => void): void', gave the following error.Argument of type '(user: import("/home/ywoosang/\uBC14\uD0D5\uD654\uBA74/projects/service/models/user").default, done: (err: any, id?: unknown) => void) => void' is not assignable to parameter of type '(user: Express.User, done: (err: any, id?: unknown) => void) => void'.Types of parameters 'user' and 'user' are incompatible.Type 'User' is missing the following properties from type 'User': id, nickname, email, password, and 34 more.Overload 2 of 2, '(fn: (req: IncomingMessage, user: User, done: (err: any, id?: unknown) => void) => void): void', gave the following error.Argument of type '(user: User, done: (err: any, id?: unknown) => void) => void' is not assignable to parameter of type '(req: IncomingMessage, user: User, done: (err: any, id?: unknown) => void) => void'.Types of parameters 'user' and 'req' are incompatible.Type 'IncomingMessage' is missing the following properties from type 'User': id, nickname, email, password, and 33 more.ts(2769)
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
미들웨어 하위 스택
isLoggedIn이라는 함수를 따로 만들어 2개의 함수를 사용하는 이유가 isLoggedIn함수를 재사용하기 위해서인지 아님 다른 이유가 있는지 궁금합니다. 제가 생각하기에는 1개의 함수로 만들어 사용할 수 있다고 생각합니다.
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
sequelize 질문입니다
항상 좋은 수업 감사합니다!! js기반 sequelize products와 Memo 1:n관계 설정해주고 이런식으로 가져왔습니다. await models.Products.findOne({ where : { id : req.params.id }, include :[ 'Memo' ] }); 근데 여기수업 그리고 공식API 문서보니까 getProjects이런식으로 1:n관계 데이터 가져오는 거 같아서 getXXX 이게 1:n 관계 가져올 때의 쿼리가 맞는지 궁금합니다.
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
기존 라이브러리의 타입과 새로 만든 타입이 충돌할 때 해결방법이 궁금합니다!
제로초님 안녕하세요? 강의 들은 내용을 응용해 다른 라이브러리의 타입을 수정하려고 하는데 타입 충돌이 발생해서 조언을 구합니다. native-base라는 라이브러리의 Accordion 컴포넌트의 속성 중 expanded의 타입을 number에서 number[ ]로 바꾸고 싶어서 수정하고 싶은 부분을 src/@types/index.d.ts에 다음과 같이 만들고 export {}; declare module 'native-base' { export interface Accordion extends Testable { dataArray: Array<any>; headerStyle?: RnViewStyleProp; contentStyle?: RnViewStyleProp; renderHeader?: (item: any, expanded: boolean, index: number) => React.ReactElement<any>; renderContent?: (item: any, index: number) => React.ReactElement<any>; expanded?: number[]; //기존 number를 number[]로 수정함 icon?: string; expandedIcon?: string; iconStyle?: RnTextStyleProp; expandedIconStyle?: RnTextStyleProp; style?: RnViewStyleProp; } } tsconfig.json의 "typeRoots":["./src/@types/index.d.ts"] 을 설정하여 새로 만든 타입을 인식하는 데까지는 성공했습니다. 그런데 기존 node_modules/native-base에 있는 index.d.ts를 먼저 인식해 수정한 타입이 적용되지 않습니다. node_modules에 있는 native-base의 index.d.ts를 지우지 않으면 안되는 걸까요? 기존 라이브러리의 타입을 수정하고 싶을 때 이런 경우는 어떻게 해야할지 감이 안와서요ㅜㅜ 조언 부탁드립니다~
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
스키마
강의하신 자료들 스키마 구조를 볼 수 있는 링크가 따로 있을까요 ? 있다면 공유 부탁드립니다.
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
sequelize config 설정
강의에 나온 것처럼 config 파일에서 dialect 타입을 string으로 설정해줬더니 models/sequelize 파일에서 형식을 할당할 수 없다고 나와 sequelize/types 파일에서 Dialect타입을 가져와 string타입에서 Dialect로 변경해줬더니 오류 메세지가 안나왔습니다. dialect에 타입이 정확히 뭔지 궁금합니다. 그리고 왜 제 환경에선 안되고 제로초님 환경에서 string타입이 가능한지 궁금합니다. 첫 번째 사진은 Dialect타입으로 변경한 부분이고, 두번 째 사진은 string타입일 때 오류 내용입니다. .
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
* as를 쓰는 이유
* as를 쓰는 이유가 express정의 안에 export default값이 없을 때 사용한다고 말씀하셨는데 그 이유가 express 모듈에 기본값(default)이 설정 되지 않아 모든 export값을 불러오기 위함일까요 ?
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
typeRoots, files 옵션에 대한 질문있습니다
안녕하세요! 제로초님 typeRoot나 files 옵션을 적용안시키면, 모든 ts파일에 옵션이 적용이 될텐데, 굳이 특정 파일만 옵션을 적용시키는게 이해가 잘 안갑니다. 옵션설정을 한 파일들, ./index.ts 나 /types/index.ts등은 어차피 옵션설정을 지정 안해줘도, 컴파일이나 타입을 가져오지 않나용??
- 미해결Node.js에 TypeScript 적용하기(feat. NodeBird)
프론트단에 질문이 있습니다
백엔드 노드쪽 타입과 함께 프론트쪽도 타입스크립트로 하고 있는데 기존 react-nodebird의 _app.js 나 index파일이랑 ts-nodebird의 _app.tsx, index 파일들을 보면 코드구조가 다르거나 추가되는 것들이 있는데 코드가 다른 이유가 있는건가요? 프론트에 타입스크립트 적용하려면 ts-nodebird 기준으로 하면 될까요?
- 해결됨Node.js에 TypeScript 적용하기(feat. NodeBird)
passport관련 에러가 있습니다
안녕하세요! 제로초님! 좋은 강의 항상 감사드립니다. < passport/index.ts > 질문과 답변란에 저와 같은 passport 에러가 있는 분이 있어 저렇게 제너릭을 사용했었습니다. 그래도 안되서, 제로초님이 질문란에 조언주신대로 tsc돌리고 에러확인해봤는데, console창에 ts파일에서의 에러와 같은 에러가 출력됩니다. 일단 계속 구글링 해보고 있습니다..! < model/user.ts >