Website-Suche

node.js - Gibt es eine standardmäßige Typescript + Nodejs Server-Boilerplate-Vorlage?


Ich entwickle eine Angular2-App und versuche, einen einfachen Webdienst dafür zu erstellen. Daher möchte ich auch TypeScript auf dem Server verwenden.

Ich habe ein wenig im Internet darüber nachgeschaut und nur einige Blogbeiträge gefunden, die TypeScript manuell mit Node und Express einrichten.

Ich frage mich, ob es eine standardmäßige Boilerplate-Vorlage gibt, die einfach ein Projekt mit Typescript und einem Hello World-Webservice in Node (und vielleicht Express) startet.

BEARBEITEN: Ich schätze, eine andere Variante der Frage wäre: Gibt es ein Web-Framework, das für TypeScript entwickelt wurde?

EDIT2: Ich konnte keine passende Antwort darauf finden, also habe ich mich schließlich von Typescript entfernt und bin zu einem vollwertigen Framework in Sails gewechselt und habe einfach deren Javascript-Version verwendet.

Antwort #1

Nodejs-Tools für Visual Studio werden mit ein paar Express-Startervorlagen geliefert. Leider verwenden sie eine alte Version von Express und sind kein guter Ausgangspunkt.

Der beste Weg, TypeScript auf ein Problem anzuwenden, besteht darin, mit etwas JavaScript zu beginnen. Jedes Express-Vorlagenprojekt ist also völlig in Ordnung, und das Installieren der Typdefinitionen erfolgt automatisch für Sie, wenn Sie Visual Studio Code oder eine Reihe anderer IDEs verwenden.

ODER einfach npm i --save @types/express.

Es gibt also nichts, was man dadurch gewinnt, dass man ein NodeJS-Backend mit einem JavaScript/TypeScript-Frontend verwendet, im Vergleich zu jeder anderen Backend-Technologie. Die Serialisierungsbarriere kapselt sie buchstäblich ab, also benutze einfach das Backend, das am meisten Sinn macht.

Wenn Sie beabsichtigen, Schnittstellendeklarationen für Modelle zu teilen, gibt es viele Werkzeuge, um TypeScript aus Quellcodedateien anderer Sprachen zu generieren.

Antwort #2

https://github.com/dwyl/hapi-typescript-example

Ich habe auch eine Beispiel-Sails-TypeScript-App gestartet https://github.com/aslanvaroqua/sails-ts

grundlegende Idee:

/**
 * WelcomeController
 *
 * @description :: Server-side logic for managing Welcomes
 * @help        :: See http://links.sailsjs.org/docs/controllers
 */

import e = require('express');
import util = require('util');

declare const sails: any;

const WelcomeController = {
  index: function (req: e.Request, res: e.Response, next: Function) {
    console.log('index() from WelcomeController.ts');
    sails.models.welcome.find().limit(1).then((welcome) => {
      /// TODO: add logger
      console.log(`welcome page rendering w/ message ${welcome[0].message}`);
      return res.render('welcome', {
        welcome: welcome[0].message
      });
    }).catch((err:Error) => {
      console.error(err.message);
      return res.render('500', err)
    });


  },
  config: function (req: e.Request, res:e.Response, next:Function) {
    console.log('config() from WelcomeController.ts');
    return res.status(200)
      .send('<h1>sails.config :</h1><pre>' + util.inspect(sails.config) + '<pre>');
  }
};

module.exports = WelcomeController;

Modell

export class Welcome {
   attributes: any = {
    id: {
      type: 'integer',
      primaryKey: true
    },
    message: {
      type: 'string',
      required: true,
      defaultsTo: 'default message'
    }
  };
}

typings.json

{
  "dependencies": {
    "bluebird": "registry:npm/bluebird#3.5.0+20170314181206",
    "connect": "registry:dt/connect#3.4.0+20160510010627",
    "express": "registry:dt/express#4.0.0+20170118060322",
    "express-serve-static-core": "registry:dt/express-serve-static-core#4.0.0+20170324160323",
    "sails": "registry:npm/sails#0.12.0+20160610190623",
    "serve-static": "registry:dt/serve-static#1.7.1+20161128184045"
  },
  "globalDependencies": {
    "es6-shim": "registry:dt/es6-shim#0.31.2+20160726072212",
    "node": "registry:dt/node#7.0.0+20170322231424",
    "socket.io": "registry:dt/socket.io#1.4.4+20170313110830"
  }
}

Test

describe("HashSet", function() {
  it("should behave like a set, removing duplicates", function() {

  });
});