コンフィギュレーションAPIレストコンKOA Yタイプスクリプト


Nodejs 12.18.2 - Typescript 4.02 - Koa 2.13 - ts-node 9.0.0 - tsc-watch 4.2.9


Aunque He Trabajadoノードは、JavaScript Hace Ya Varios Aをとります.En El Trabajo , Anabo de iniciar un nuevo proyecto donde se citle la creaci to n varios microservicios on a typescript y v . es o como la oportunidad perfta by mostrarles ( Y apender claro !)A . N . D . A . N . A . A . N . A . A .として

コンフィギュレーション


Primero , Crearemos Nuestro proyecto , Prio Ejecutamos en la la Consola el Comando :
$ npm init -y
エステクレアエルArchivoパッケージ.JSON que Contendr et m Los M . Dulos usados en esteste proyecto junto con otras構成
VAMOS AのAPI APIKoa デロスMismos Creadoresデ急行u m duloは、類似したExpero Pero Mucho M ' s s liviano、R Pal y s s Le Lido que Nos permite ir a .
$ npm i koa koa-basic-auth koa-bodyparser koa-logger koa2-cors koa-mount koa-router
  • Koa Basic Auth : Menejar Autenticaci
  • KOA bodyparser *:Paralamiento m体s f fはいcilを解釈してください.
  • Koa Logger *: LoggeaラスPeticionesのHTTP en Consola que van llegando
  • パラエルオプトデコルズ
  • Konaマウント*:パラモンタール国連ミドルウェアsobre la plice la plicaci n . n.
  • Konaルータ*:パラマンジャラスRutasデルAPI.
  • Ellas Nodemon que Ya conocemosを中心として
    $ npm i -D typescript nodemon  ts-node tsc-watch @types/koa @types/koa-bodyparser @types/koa-logger @types/koa-mount @types/koa-router @types/koa2-cors @types/koa-basic-auth
    
    エルM・リードtsc-watch NOS permite Ejecutar un Comando Despu ' s de de que Halla@types ロス・ポール・デュロスのヴァーモス『サラ・パラ版』の息子たち
    <研究ノート>私にとってのグァート・ポウダー・トラブジャールの研究( 2 )ts-node エル・アーキヴォードにおけるエプロートserver.ts エヌVez del cは、digoトランジドイドdist/server.js パラファイナのAllounos procesos como el debug
    スーパーItantante、Ahora、詐欺ラayudaデルtsc ( TypeScriptコンパイラ)、Creamos el Archivo que le dirは、型スクリプトC .
    $ npx tsc --init
    
    ソロtsc --init SI YA Tenemos Installado型スクリプトGlobalmenteNaveVez Ejecutado El C c didigo , Nos crea un archivotsconfig.json パラモジュラー
  • Transilar el c c dio go ES 6
  • <研究ノート> Ne Entrno de Nodejsについて
  • サライダの指示/dist ) デLos Archivos JS y ELエルDirectorio Raiz donde se encuentraトドエルCディックdigo Ts.
  • <資料> E . C . C .ディゴーに対する指示: Y - Cuの場合
  • スペイン語としてのラテン語:スペイン語を中心としてtsconfig.json se veaとして
    {
      "compilerOptions": {
        /* Visit https://aka.ms/tsconfig.json to read more about this file */
    
        /* Basic Options */
    
        "target": "es6",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
        "module": "commonjs",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
         "outDir": "./dist",                        /* Redirect output structure to the directory. */
         "rootDir": "./",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
    
        /* Strict Type-Checking Options */
        "strict": true,                           /* Enable all strict type-checking options. */
    
        /* Module Resolution Options */
        "moduleResolution": "node",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
        "baseUrl": "./",                       /* Base directory to resolve non-absolute module names. */
        "esModuleInterop": true,                  /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
    
        /* Experimental Options */
        "experimentalDecorators": true,        /* Enables experimental support for ES7 decorators. */
    
        /* Advanced Options */
        "skipLibCheck": true,                     /* Skip type checking of declaration files. */
        "forceConsistentCasingInFileNames": true  /* Disallow inconsistently-cased references to the same file. */
      },
      "include": ["./**/*"],
      "exclude": ["node_modules", "./**/*.spec.ts"]
    }
    
    
    アンテデescribir la priera lは、NerdデCディルディゴ、Vamosは、Configar El PuntoデEnteradaデNustrstra API Junto Conn algunos ComandosのタイルエヌNuestroパッケージの終端のVamosです.日本語教育研究会scripts ディゴー:ディゴー
    ...
    "scripts": {
        "dev": "nodemon",
        "dev:js": "tsc-watch --onSuccess \"node dist/server.js\" ",
        "build": "tsc dist/settings",
        "start": "node dist/server.js"
      }
    ...
    
    Finalmente、CreamosエルArchivoノデモン.JSONパラシュートで降下する人que que en en desarrollo se ejecute despu es da cada cambio que hagamos de forma automは,はいy tener que estar todo el tiempo levantando y bajando el servidor
    {
      "watch": ["./"],
      "ext": "ts",
      "ignore": ["./**/*.spec.ts"],
      "exec": "ts-node ./server.ts"
    }
    

    APIレスト


    Empecemos Creando el Archivoapp.ts <研究ノート> L . A . A . L . A . L . A . N .
    import koa from "koa";
    import bodyparser from "koa-bodyparser";
    import loggerKoa from "koa-logger";
    import cors from "koa2-cors";
    import mount from "koa-mount";
    import auth from "koa-basic-auth";
    import health from "./health";
    
    //init
    const app = new koa();
    
    //middlewares
    app.use(cors());
    app.use(loggerKoa());
    app.use(bodyparser());
    app.use(mount("/health", auth({
        name: 'user',
        pass: 'password',
    })));
    
    //Routes
    app.use(health.routes());
    
    //export server
    export default app;
    
    
    Creamos Ahoraエルルータque Manejarは、ラスRutas y EL反応カーダカモに反応します.パラエロCreamos EL Archivohealth.ts <研究ノート>
    import Router, { IRouterParamContext } from "koa-router";
    
    //init
    const healthRouter = new Router();
    
    healthRouter.get("/", async (ctx) => {
      ctx.status = 200;
      ctx.body = "ok";
    });
    
    healthRouter.get("/health", async (ctx) => {
    
      ctx.status = 200;
      ctx.body =  {
        nodeVersion: process.version,
        service: 'TypeScriptNode',
        memory: process.memoryUsage(),
        pid: process.pid,
        uptime: process.uptime(),
        environment: 'dev',
        appVersionPackage: "1.0.0",
        };
    });
    
    
    export default healthRouter;
    
    <研究ノート> Limo Creamos el Servidor http que llama nuestra aplicaci
    import { Server } from "http";
    import { AddressInfo } from "net";
    import app from "./app";
    
    class ApiServer {
      server!: Server;
      public constructor() {}
    
      listen = () => {
        const PORT = process.env.PORT || 3000;
        this.server = app.listen(PORT, async () => {
          console.log(
            `When it's ${new Date().toLocaleString()} we are getting ready`
          );
          console.log(`Starting in ${process.env.NODE_ENV} mode`);
          console.log(`Listening on ${PORT}`);
        });
      };
    
      close = () => {
        this.server.close();
      };
    
      address = () => {
        return this.server.address() as AddressInfo;
      };
    }
    
    const server = new ApiServer();
    server.listen();
    
    y EjecutamosエルAPIコンユダ$ npm run dev Y詐欺郵便屋HacemmosラPeticiGET AlphaのエンドポイントConfigaado y voalは!

    リスト!TememosはConfigado Neostro proyectoベースのde de typescript conノード、sencillo、prのccicy y muyのstral al iniciar una nueva APIまでtiti.
    NOS Vemos

    source code https://gitlab.com/makitocode/typescript-node-api