diff --git a/README.md b/README.md index 0e128ba..c52dc54 100644 --- a/README.md +++ b/README.md @@ -425,28 +425,30 @@ You can create your own HTTP from scratch to handle Amazon requests manually. Se ```javascript const Hapi = require('hapi'); -const server = new Hapi.Server(); const app = require('./app'); // Your app -server.connection({ +const server = Hapi.server({ port: process.env.PORT || 8888 }); server.route({ path: '/', method: 'POST', - handler: (request, response) => { - app.handle(request.payload, (data) => { - response(data); + handler: (request, h) => { + return new Promise((resolve) => { + app.handle(request.payload, (data) => { + resolve(h.response(data)); + }); }); } }); -server.start((err) => { - if (err) throw err; - console.log('Server running at:', server.info.uri); - app.saveSpeechAssets(); -}); +server.start() + .then(() => { + console.log(`Server running at: ${server.info.uri}`); + // app.saveSpeechAssets(); + }) + .catch(console.error); ``` ## Deploy diff --git a/package.json b/package.json index 8dd4b2f..882718a 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "eslint-config-standard": "^6.2.1", "eslint-plugin-promise": "^3.3.1", "eslint-plugin-standard": "^2.0.1", - "hapi": "^15.2.0", + "hapi": "^17.3.1", "i18next": "^4.1.0", "i18next-node-fs-backend": "^0.1.3", "istanbul": "^0.4.5", diff --git a/src/create-server.js b/src/create-server.js index 901ab75..c43c33f 100755 --- a/src/create-server.js +++ b/src/create-server.js @@ -12,20 +12,21 @@ const info = require('debug')('alexia:info'); */ module.exports = (app, options) => { const Hapi = require('hapi'); - const server = new Hapi.Server(); options = Object.assign({}, options); - server.connection({ + const server = Hapi.server({ port: options.port || process.env.PORT || 8888 }); server.route({ path: options.path || '/', method: 'POST', - handler: (request, response) => { - app.handle(request.payload, (data) => { - response(data); + handler: (request, h) => { + return new Promise((resolve) => { + app.handle(request.payload, (data) => { + resolve(h.response(data)); + }); }); } }); diff --git a/test/create-server.spec.js b/test/create-server.spec.js index 73dd9c0..fc10e85 100755 --- a/test/create-server.spec.js +++ b/test/create-server.spec.js @@ -30,24 +30,41 @@ describe('server', () => { app.handle.restore(); }); - it('should create working Hapi server', (done) => { - const server = app.createServer(app); - - server.start(serverError => { - expect(serverError).to.be.not.ok; + it('should ensure expected route is defined on Hapi server', (done) => { + const server = app.createServer({ + path: '/skill' + }); - // Send POST request to server - request(createRequestOptions(server.info.uri), (requestError, response) => { - expect(requestError).to.be.not.ok; - expect(response.body).to.deep.equal(mockResponse); - expect(response.statusCode === 200); + server.inject({ + url: '/skill', + method: 'POST', + payload: mockRequest + }) + .then(response => { + expect(response.statusCode).to.deep.equal(200); + expect(response.headers).to.contain.keys('content-type', 'content-length'); + expect(JSON.parse(response.payload)).to.deep.equal(mockResponse); + }) + .then(() => done()) + .catch(done); - server.stop(); + }); - done(); - }); - }); + it('should create working Hapi server', (done) => { + const server = app.createServer(); + server.start() + .then(() => { + // Send POST request to server + request(createRequestOptions(server.info.uri), (requestError, response) => { + expect(requestError).to.be.not.ok; + expect(response.body).to.deep.equal(mockResponse); + expect(response.statusCode === 200); + }); + }) + .then(() => server.stop()) + .then(() => done()) + .catch(done); }); });