1. express, @types/express 모듈, typescript, typescript config 생성
create express, @types/express modules, typescript and typescript config
$ npm init -y && npm express @types/express typescript && tsc --init;
2. 개발폴더 src, 배포폴더 dist 생성
create src folder for resources and dist folder for diployed files
$ mkdir dist && mkdir src
3. src/index.ts, src/Main.ts 생성 후, 내용 채워넣는다.
create src/index.ts and src/Main.ts and then fill them up
$ vi src/index.ts
// src/index.ts
import {Main} from "./Main";
const main = new Main();
main.run();
$ vi src/Main.ts
// src/Main.ts
import * as express from "express";
export class Main{
private express:any;
constructor(){
// express:e e는 호출할 수 있는 유형의 타입이 아니다.
// "esModuleInterop": true 일때 import 관련해서 나오는 에러임.
// 참고: https://www.typescriptlang.org/tsconfig#esModuleInterop
this.express = express();
this.express.listen(3000,()=>{
console.log("port 3000 start running")
});
}
run():void{
this.express.get("/", (req: express.Request, res:express.Response)=>{
res.send("hello world");
})
}
}
4. package.json 에서 scripts 부분, 작성해준다
in your package.json, fill up the "start" property properly
// tsc 로 tsc 파일들 컴파일 한 이후에, js파일로 컴파일되어서 dist 파일에 생성된 index.js를 node 명령어로 실행
"scripts": {
"start": tsc && node dist
}
5. tsconfig.json 설정
set your tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true,
"outDir": "dist",
"esModuleInterop": false,
"forceConsistentCasingInFileNames": true
},
"include": [
"src/**/*"
]
}
다시 짚고 넘어가고 싶은 부분
looking back
TS2349: This expression is not callable. Type 'typeof e' has no call signatures. Main.ts(1, 1): Type originates at this import. A namespace-style import cannot be called or constructed, and will cause a failure at runtime. Consider using a default import or import require here instead.
이런 에러를 만났는데, common.js 모듈시스템에서, import * as A from "a" 와 import A from "a" 이게 컴파일될 때 약간의 의미 차이를 가지나 보다. const A = require("a").default , const A = require("a") 이 차이에 대해서 막 영어로 설명하는 데,
commonJS 모듈 시스템에 대한 기본 이해가 없는 나로서는, 한번 읽고 이해하기가 어려워서 일단 넘겼다.
I met this error, I think in common.js modules system, it has a diffrent meaning between import * as A from "a" and import A from "a", but which was a bit hard for me to get it, because it was almost my first time to deal with this modulue system. so I just moved on, thinking about taking a look again tomorrow..
기술 사용 이유
reason to use ts,express,node.js
- 객체지향에 대해서 더 공부해 보고 싶었다. 사둔 책이 여러권 있다. design pattern과 uml에 대해서 좀 더 알고 싶다. 내가 공부해 본 언어중에(js, java, c, php, typescript) 그럼 java와 typescript, modern php가 남게 된다.
- I just wanted to study on object oriented programming, there are books I bought for it, actually the books are about uml and design patterns, I want to read them, since I already have had knowledges for js, java, c, php, typescript, I had to choose them there are only two options left.
-
java로 서버사이드를 했으면 가장 좋았을 텐데, 나는 java로는 안드로이드와 문법만 공부를 해봤다. 그리고 학교 공부를 하면서, java로 환경설정하는 게 너무 힘들었다. 어디서 꼬였었는 지, 그 떄 너무너무 헤메서, 가급적 빠르고 간단하게 시작할 수 있는 게 좋았다. 다른 공부해야 할 것도 많이 있기 떄문에, 자바 환경설정에 목매고 싶지 않았다. 그냥 객체지향이고 빠르고 간단하면, 객체지향 공부목적으로 접근하는 나에게는, 더 이상 바랄게 없을 것 같앗다.
-
if I had been able to use java for serverside applicationn, it would have been best for me, but I only have had a experience on java itself(grammer), and android. and acutually, I have not good memory for setting up initial enviroment of backend application with java. so I just wanted to get on with setting it up as soon as possible. I don't want to be tied up to building up java env. that's why I thought nothing would be better, as long as the thing was the way of OOC, and fast and easy to start a project
-
그런면에서 node는 npm module들을 많이 쓸 수 있어서, 선택했다.
-
that's why I chose them..
'서버 개발 > node' 카테고리의 다른 글
[nodejs] sequelize, 커스텀 외래키, 다대다 관계 설정 (0) | 2021.08.12 |
---|---|
[nodejs] 노드js에서 data를 다른 라우터에게 전달해줄 수 있는 방법 (0) | 2021.06.24 |