DefinitelyTyped/hapi/hapi-tests.ts
Ben Herila 7bf9ee34c6 Fixed IReply definition (#8960)
* Fixed IReply definition

* Fix a lot of inconsistent whitespace which caused merge issues

* [Hapi] Add support for IReply::state and IReply::unstate

* Add support for IReply::header(name, value, options)

* Reply functions should be returning Response objects

* Specify IHeaderOptions

* [Hapi] Got tests passing locally, also made the other hapi files consistent with the v8.2.0 ts
Sorry about any attribution clobbering but there wasn't much in the git blame view anyways.
2016-04-17 23:48:56 +09:00

173 lines
3.5 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.state('cookie_key', 'cookie_value');
reply('chained-notation')
.bytes(16)
.code(200)
.type('text/plain')
.unstate('cookie_to_remove')
.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', () => {
});