Implements abstraction for Hapi in TypeScript that makes it similar to ASP.NET WebAPI to implement APIs on Hapi.
npm install hapi-webapish
npm init
`
Install hapi-webapi and save it to your package.json dependencies:
`sh
npm install hapi-webapi --save
`
Create a server.ts file with the following contents:
`js
import {WebApp, StartOptions} from 'hapi-webapi/server';
import {Startup} from "./Startup";
var options = new StartOptions();
options.port = 4600;
//To enable CORS set options.cors to true. Default value is false
options.cors = true;
WebApp.Start(Startup, options);
`
Create a startup.ts file with the following contents:
`js
import {IStartup, IAppBuilder, HttpConfiguration} from 'hapi-webapi/server';
import {UsersController} from "./Controllers/UsersController";
const pgk = require("./package.json");
export class Startup implements IStartup {
Configuration(app: IAppBuilder) {
var config = new HttpConfiguration();
app.useWebApi(config);
config.enableSwagger({ title: 'Directory API', description: pgk.description, version: pgk.version });
config.enableSwaggerUi({ title: 'API Documentation v' + pgk.version, path: '/docs' });
// This is different from ASP.NET WebAPI, controllers needs to manually be registered.
app.controllers.add(UsersController);
app.useWelcomePage();
//app.useDirectoryBrowser('./public/', '/files/');
//app.useStaticFiles('static');
}
}
`
Create a controller.ts file with the following contents:
`js
import {ApiController} from 'hapi-webapi/controllers';
import {RoutePrefix, Route, HttpGet, HttpDelete, HttpPut, HttpPost} from 'hapi-webapi/routing';
@RoutePrefix("users")
export class UsersController extends ApiController {
@Route("{id}")
@HttpGet() // Also supports @HttpPut, @HttpPost, @HttpDelete
getUserById(id: string) {
return "getUserById:" + id;
}
@Route("search")
@HttpPost()
searchUsers(id: string) {
return this.notFound();
}
@Route("list")
@HttpGet()
list() {
// Examples of request object values available:
// Url object.
console.log(this.request.requestUri);
// HTTP version.
console.log('HTTP Version: ' + this.request.version);
// HTTP headers.
console.log(this.request.headers);
return "Hello World!";
}
}
`
Launch the application by running:
`sh
npm start
``