DefinitelyTyped/hapi/hapi-tests.ts
2016-02-24 15:49:42 -05:00

168 lines
3.6 KiB
TypeScript

/// <reference path="hapi.d.ts" />
import Hapi = require("hapi");
// Create a server with a host and port
var server = new Hapi.Server();
server.connection(<Hapi.IServerConnectionOptions>{
host: "localhost",
port: 8000
});
// Add plugins
var plugin: any = {
register: function (plugin: Object, options: Object, next: Function) {
next();
}
};
plugin.register.attributes = {
name: "test",
version: "1.0.0"
};
// optional options parameter
server.register({}, function (err) {});
// optional callback function with and without options
server.register({}).then((res: any) => {
console.log(res);
});
server.register({}, { select: "api", routes: { prefix: "/prefix" } }).then((res: any) => {
console.log(res);
});
// optional options.routes.vhost parameter
server.register({}, { select: "api", routes: { prefix: "/prefix" } }, function (err) {});
//server.pack.register(plugin, (err: Object) => {
// if (err) { throw err; }
//});
//server.pack.register([plugin], (err: Object) => {
// if (err) { throw err; }
//});
// Add server method
var add = function (a: number, b: number, next: (err: any, result?: any, ttl?: number) => void) {
next(null, a + b);
};
server.method("sum", add);//, { cache: { expiresIn: 2000 } });
server.methods["sum"](4, 5, (err: any, result: any) => {
console.log(result);
});
var addArray = function (array: Array<number>, next: (err: any, result?: any, ttl?: number) => void) {
var sum: number = 0;
array.forEach((item: number) => {
sum += item;
});
next(null, sum);
};
server.method("sumObj", addArray, {
//cache: { expiresIn: 2000 },
generateKey: (array: Array<number>) => {
return array.join(',');
}
});
server.methods["sumObj"]([5, 6], (err: any, result: any) => {
console.log(result);
});
// Add the route
server.route({
method: 'GET',
path: '/hello',
handler: function (request: Hapi.Request, reply: Function) {
reply('hello world');
}
});
server.route([{
method: 'GET',
path: '/hello2',
handler: function (request: Hapi.Request, reply: Function) {
reply('hello world2');
}
}]);
// config.validate parameters should be optional
server.route([{
method: 'GET',
path: '/hello2',
handler: function(request: Hapi.Request, reply: Function) {
reply('hello world2');
},
config: {
validate: {
}
}
}]);
// Should be able to chain reply options
server.route([{
method: 'GET',
path: '/chained-notation',
handler: function(request: Hapi.Request, reply: Hapi.IReply) {
reply('chained-notation')
.bytes(16)
.code(200)
.type('text/plain')
.header('X-Custom', 'some-value');
}
}]);
// Start the server
server.start();
// server startup may now return a promise
server.start()
.then(() => {
console.log('Started!');
});
//inject a request into connection
server.inject({
method: 'GET',
url: '/hello'
}).then(response => {
console.log(response.statusCode);
});
//the same but this time using callback
server.inject({
method: 'GET',
url: '/hello'
}, response => {
console.log(response.statusCode);
});
//tests for server initialization
server.initialize()
.then(() => {
console.log('Initialized!')
});
//and the same but with callback
server.initialize(err => {
if (err) {
console.log(err);
}
});
//server stopping may now return a promise
server.stop()
.then(() => {
console.log('Stopped!');
});
//decorate can take an optional options argument
server.decorate('hello', 'world', () => {}, {
apply: true
});
server.decorate('hello2', 'world2', () => {});