첫 Deno 웹 서비스를 구현한 후 방금 배운 6가지

9112 단어 microservicesnodedeno
어제 에 대해 공유한 것처럼 오늘은 API Gateway with Deno 을 구현하려고 합니다. 초기에 Node.js version을 생성했기 때문에 Deno로 마이그레이션하는 것이 매우 간단해야 한다고 생각했지만 실제로는 그렇지 않습니다. 설명서와 몇 가지 자습서를 읽는 데 약 3시간이 걸렸습니다!

다음은 나중에 참조할 수 있는 몇 가지 참고 사항입니다.

1. 서버 및 HTTPOptions



Node.js와 유사하게 Deno는 웹 서버를 처리하기 위한 표준 라이브러리인 http을 제공합니다. 나는 그것을 조금 가지고 놀았다. 그런 다음 opine 이라는 Express의 드롭인 대체품이 있음을 금방 알게 되었습니다.

그래서 이 lib로 전환합니다. Express와 거의 동일하게 작동하지만 불완전하며 listen 방법은 상당히 다릅니다.

Express를 사용하여 hostport 를 설정하려면 다음과 같이 작성할 수 있습니다.

app.listen(port, host, onServerReady);


그러나 Opineapp 인스턴스에서는 다음 방법이 작동하지 않았습니다.

app.listen(port, host, onServerReady);
app.listen(host, port, onServerReady);
app.listen({port, host}, onServerReady);


이 문제와 관련된 문서/예제가 없으므로 source code을 살펴보고 표준http/server 라이브러리에서 HTTPOptionsHTTPSOptions를 사용하는지 확인해야 합니다. 그들은 host 속성 이름을 server.listen() in Node.js 으로 사용하지 않고 hostname 로 사용했습니다. 따라서 올바른 방법은 다음과 같습니다.

app.listen({hostname: host, port}, onServerReady);


2. HTTP 프록시



다른 API 게이트웨이로서 일부 엔드포인트를 장면 뒤의 실제 서비스에 매핑해야 합니다. Node.js에서는 http-proxy-middleware 을 사용합니다. Deno에는 opine-http-proxy이 있습니다.

아직 이 라이브러리를 충분히 파헤치지 못했습니다. 하지만 제가 사용하고 있는 기본적인 방법은 약간의 차이를 보입니다.

express/http-proxy-middleware를 사용하여 다음과 같이 작성하면:

app.use('/login', createProxyMiddleware('https://abc.com'));


그러면 {API_GATEWAY_DOMAIN}/login에 대한 모든 요청이 https://abc.com/login로 전달됩니다.

그러나 opine/opine-http-proxy를 사용하면 정확히 경로를 작성해야 합니다.

app.use('/login', createProxyMiddleware('https://abc.com/login'));


3. 깃발



Node.js를 사용하여 간단하게 실행하면node script.js 모든 것이 잘 작동합니다. 그러나 Deno에서는 deno run script.ts가 예상대로 작동하지 않을 수 있습니다. Deno는 기본적으로 스크립트 실행에 대한 권한을 부여하지 않기 때문입니다. 따라서 스크립트가 네트워크에 액세스해야 하는 경우 플래그--allow-net로 시작해야 합니다.

deno run --allow-net script.ts


또한 하드 디스크에서 파일을 로드해야 하는 경우 플래그--allow-read로 시작해야 합니다.

deno run --allow-net --allow-read script.ts


또한 --allow-write 파일 쓰기, --allow-env 환경 변수 가져오기, --allow-run 하위 프로세스 실행 및 more here .

그러나 --allow-all를 사용하여 모든 권한을 활성화할 수 있으므로 Node.js와 동일하게 작동하지만 그렇게 해서는 안 됩니다. 이것이 Deno의 고유한 값입니다.

4. readJson 및 --unstable 플래그



내 서비스에는 항상 서비스 설정을 정의하는 항목a service.json file이 있으므로 JSON 파일을 구문 분석해야 합니다.

Node.js와 유사하게 Deno는 fs이라는 표준 라이브러리도 제공합니다. 그리고 그곳에서 JSON 콘텐츠를 다루는 친숙한 방법이 거의 없다는 것을 알게 되었습니다.

그러나 다음은 작동하지 않습니다.

import { readJson } from "https://deno.land/std/fs/mod.ts";




보시다시피 많은 불필요한 모듈을 로드하고 명령에 --unstable를 추가해야 합니다. 예를 들면 다음과 같습니다.

deno run --allow-net --allow-read --unstable app.ts


불안정한 것이 마음에 들지 않는 경우 해당 항목read_json.ts을 참조하고 자신만의 방법을 작성할 수 있습니다. 예를 들면 다음과 같습니다.

const readJson = async (filePath: string) => {
  const content = await Deno.readTextFile(filePath);
  return JSON.parse(content);
};


5. 내장 로거



Deno의 log 라이브러리는 Pythonlogging 모듈과 매우 유사합니다. 저도 파이썬으로 작업하기 때문에 익숙해지기가 그리 어렵지 않습니다.

이 lib는 파일 회전, 사용자 지정 형식 및 핸들러를 지원합니다. 따라서 Node.js와 마찬가지로 타사 모듈을 사용할 필요가 없습니다.

6. Deno용 도커 이미지는 무엇을 선택해야 합니까?



Deno 팀은 아직 공식 도커 이미지를 구축하지 않았지만 hayd/deno-docker 을 사용하는 것이 좋습니다. 정기적으로 업데이트되고 공식화하는 것에 대해 a discussion 있기 때문입니다.

결론



Node.js는 멋지다. 데노도 멋지다. package.json 도 없고 node_modules 도 없습니다. 그러면 사물이 더 단순하고 깨끗해 보입니다. 표준 라이브러리와 내장 도구는 훌륭합니다. 하지만 이 생태계가 성숙하려면 더 많은 시간이 필요합니다...

좋은 웹페이지 즐겨찾기