Skip to content

Instantly share code, notes, and snippets.

@pmlopes
Created September 27, 2018 09:11
Show Gist options
  • Select an option

  • Save pmlopes/ce9becabcb4f147e0df3168a596acaa3 to your computer and use it in GitHub Desktop.

Select an option

Save pmlopes/ce9becabcb4f147e0df3168a596acaa3 to your computer and use it in GitHub Desktop.

Revisions

  1. pmlopes created this gist Sep 27, 2018.
    120 changes: 120 additions & 0 deletions index.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,120 @@
    /// <reference types="@vertx/core/runtime" />
    // @ts-check
    const util = require('util');

    import {Router} from '@vertx/web';

    import {PgClient, Tuple} from '@reactiverse/reactive-pg-client';
    import {PgPoolOptions} from '@reactiverse/reactive-pg-client/options';

    const SELECT_WORLD = "SELECT id, randomnumber from WORLD where id=$1";

    const app = Router.router(vertx);

    let client = PgClient.pool(
    vertx,
    new PgPoolOptions()
    .setUser('benchmarkdbuser')
    .setPassword('benchmarkdbpass')
    .setDatabase('hello_world'));

    app.get('/').handler(
    // // Step #1
    // ctx => {
    // client.preparedQuery(SELECT_WORLD, Tuple.of(1), res => {
    // if (res.succeeded()) {
    // let resultSet = res.result().iterator();
    //
    // if (!resultSet.hasNext()) {
    // // no result found
    // ctx.fail(404);
    // return;
    // } else {
    // let row = resultSet.next();
    //
    // ctx.response()
    // .putHeader("Content-Type", "application/json")
    // .end(JSON.stringify({id: row.getInteger(0), randomNumber: row.getInteger(1)}));
    // }
    // } else {
    // ctx.fail(res.cause());
    // }
    // });
    // }

    // // Step #2
    // ctx => {
    // // vert.x promise
    // let postgres = util.promisify(client);
    //
    // postgres
    // .preparedQuery(SELECT_WORLD, Tuple.of(1))
    // .then(rs => {
    // let resultSet = rs.iterator();
    //
    // if (!resultSet.hasNext()) {
    // ctx.fail(404);
    // } else {
    // let row = resultSet.next();
    // ctx.response()
    // .putHeader("Content-Type", "application/json")
    // .end(JSON.stringify({id: row.getInteger(0), randomNumber: row.getInteger(1)}));
    // }
    // })
    // .catch(e => ctx.fail(e));
    // }


    // // Step #3
    // ctx => {
    // (async function () {
    // // vert.x promise
    // let postgres = util.promisify(client);
    //
    // try {
    // let rs = await postgres.preparedQuery(SELECT_WORLD, Tuple.of(1));
    // let resultSet = rs.iterator();
    //
    // if (!resultSet.hasNext()) {
    // ctx.fail(404);
    // } else {
    // let row = resultSet.next();
    // ctx.response()
    // .putHeader("Content-Type", "application/json")
    // .end(JSON.stringify({id: row.getInteger(0), randomNumber: row.getInteger(1)}));
    // }
    // } catch (e) {
    // ctx.fail(e);
    // }
    // })();
    // }

    // Step #4
    async ctx => {
    // vert.x promise
    let postgres = util.promisify(client);

    try {
    let rs = await postgres.preparedQuery(SELECT_WORLD, Tuple.of(1));
    let resultSet = rs.iterator();

    if (!resultSet.hasNext()) {
    ctx.fail(404);
    } else {
    let row = resultSet.next();
    ctx.response()
    .putHeader("Content-Type", "application/json")
    .end(JSON.stringify({id: row.getInteger(0), randomNumber: row.getInteger(1)}));
    }
    } catch (e) {
    ctx.fail(e);
    }
    }
    );

    vertx
    .createHttpServer()
    .requestHandler(req => app.accept(req))
    .listen(8080);

    console.log('Server listening at: http://localhost:8080/');
    24 changes: 24 additions & 0 deletions package.json
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,24 @@
    {
    "name": "async-project",
    "version": "1.0.0",
    "private": true,
    "description": "Example of an async application",
    "main": "index.js",
    "scripts": {
    "postinstall": "vertx-scripts init",
    "start": "vertx-scripts launcher run",
    "package": "vertx-scripts package",
    "repl": "vertx-scripts repl"
    },
    "keywords": [],
    "author": "",
    "license": "ISC",
    "devDependencies": {
    "vertx-scripts": "latest"
    },
    "dependencies": {
    "@vertx/core": "latest",
    "@vertx/web": "latest",
    "@reactiverse/reactive-pg-client": "latest"
    }
    }