첫 Deno 웹 서비스를 구현한 후 방금 배운 6가지
9112 단어 microservicesnodedeno
다음은 나중에 참조할 수 있는 몇 가지 참고 사항입니다.
1. 서버 및 HTTPOptions
Node.js와 유사하게 Deno는 웹 서버를 처리하기 위한 표준 라이브러리인 http을 제공합니다. 나는 그것을 조금 가지고 놀았다. 그런 다음 opine 이라는 Express의 드롭인 대체품이 있음을 금방 알게 되었습니다.
그래서 이 lib로 전환합니다. Express와 거의 동일하게 작동하지만 불완전하며
listen
방법은 상당히 다릅니다.Express를 사용하여
host
및 port
를 설정하려면 다음과 같이 작성할 수 있습니다.app.listen(port, host, onServerReady);
그러나 Opine
app
인스턴스에서는 다음 방법이 작동하지 않았습니다.app.listen(port, host, onServerReady);
app.listen(host, port, onServerReady);
app.listen({port, host}, onServerReady);
이 문제와 관련된 문서/예제가 없으므로 source code을 살펴보고 표준http/server 라이브러리에서
HTTPOptions
및 HTTPSOptions
를 사용하는지 확인해야 합니다. 그들은 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
도 없습니다. 그러면 사물이 더 단순하고 깨끗해 보입니다. 표준 라이브러리와 내장 도구는 훌륭합니다. 하지만 이 생태계가 성숙하려면 더 많은 시간이 필요합니다...
Reference
이 문제에 관하여(첫 Deno 웹 서비스를 구현한 후 방금 배운 6가지), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ndaidong/6-things-i-just-learned-after-implementing-my-first-deno-web-service-18a8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)