Commit 70e7acfeed549e04fdc8699fb1835949fb93e411
1 parent
688244b5
Exists in
master
and in
4 other branches
Express basic structure
Showing
6 changed files
with
196 additions
and
90 deletions
Show diff stats
translate-api/app.js
| @@ -11,16 +11,13 @@ | @@ -11,16 +11,13 @@ | ||
| 11 | /** | 11 | /** |
| 12 | * Module dependencies. | 12 | * Module dependencies. |
| 13 | */ | 13 | */ |
| 14 | -var express = require('express'); | ||
| 15 | -var bodyParser = require('body-parser'); | ||
| 16 | -var shortid = require('shortid'); | ||
| 17 | -var amqp = require('amqplib/callback_api'); | 14 | +var express = require('express') |
| 15 | +var bodyParser = require('body-parser') | ||
| 16 | + | ||
| 17 | +var translate = require('./routes/translate') | ||
| 18 | +var video = require('./routes/video'); | ||
| 18 | 19 | ||
| 19 | -/** | ||
| 20 | - * Express application and router object. | ||
| 21 | - */ | ||
| 22 | var app = express(); | 20 | var app = express(); |
| 23 | -var router = express.Router(); | ||
| 24 | 21 | ||
| 25 | /** | 22 | /** |
| 26 | * For parsing application/json and application/x-www-form-urlencoded | 23 | * For parsing application/json and application/x-www-form-urlencoded |
| @@ -29,96 +26,25 @@ app.use(bodyParser.json()); | @@ -29,96 +26,25 @@ app.use(bodyParser.json()); | ||
| 29 | app.use(bodyParser.urlencoded({ extended: true })); | 26 | app.use(bodyParser.urlencoded({ extended: true })); |
| 30 | 27 | ||
| 31 | /** | 28 | /** |
| 32 | - * Function to send text to the queue. | ||
| 33 | - */ | ||
| 34 | -function sendToQueue(id, text, queue, durability, res) { | ||
| 35 | - amqp.connect('amqp://localhost', function(err, conn) { | ||
| 36 | - if(err) { | ||
| 37 | - res.json({message : err}); | ||
| 38 | - throw err; | ||
| 39 | - } | ||
| 40 | - conn.createChannel(function(err, ch) { | ||
| 41 | - if(err) { | ||
| 42 | - res.json({message : err}); | ||
| 43 | - throw err; | ||
| 44 | - } | ||
| 45 | - ch.assertQueue(queue, {durable : durability}); | ||
| 46 | - ch.sendToQueue(queue, new Buffer(text), {correlationId : id}); | ||
| 47 | - try { | ||
| 48 | - ch.close(); | ||
| 49 | - } | ||
| 50 | - catch (alreadyClosed) { | ||
| 51 | - console.log(alreadyClosed.stackAtStateChange); | ||
| 52 | - } | ||
| 53 | - }); | ||
| 54 | - setTimeout(function() { conn.close(); }, 500000); | ||
| 55 | - }); | ||
| 56 | -} | ||
| 57 | - | ||
| 58 | -/** | ||
| 59 | - * Function to receive gloss from the queue. | 29 | + * Public directory. |
| 60 | */ | 30 | */ |
| 61 | -function receiveFromQueue(id, queue, durability, res) { | ||
| 62 | - amqp.connect('amqp://localhost', function(err, conn) { | ||
| 63 | - if(err) { | ||
| 64 | - res.json({message : err}); | ||
| 65 | - throw err; | ||
| 66 | - } | ||
| 67 | - conn.createChannel(function(err, ch) { | ||
| 68 | - if(err){ | ||
| 69 | - res.json({message : err}); | ||
| 70 | - throw err; | ||
| 71 | - } | ||
| 72 | - ch.assertQueue(queue, {durable : durability}); | ||
| 73 | - ch.consume(queue, function(msg) { | ||
| 74 | - if (msg.properties.correlationId === id) { | ||
| 75 | - ch.ack(msg); | ||
| 76 | - res.send(msg.content.toString()) | ||
| 77 | - try { | ||
| 78 | - ch.close(); | ||
| 79 | - } | ||
| 80 | - catch (alreadyClosed) { | ||
| 81 | - console.log(alreadyClosed.stackAtStateChange); | ||
| 82 | - } | ||
| 83 | - } | ||
| 84 | - else { | ||
| 85 | - ch.reject(msg); | ||
| 86 | - } | ||
| 87 | - }, {noAck : false}); | ||
| 88 | - }); | ||
| 89 | - setTimeout(function() { conn.close(); }, 500000); | ||
| 90 | - }); | ||
| 91 | -} | ||
| 92 | - | ||
| 93 | -/** | ||
| 94 | - * Route to process text and return gloss. | ||
| 95 | - */ | ||
| 96 | -router.post('/', function(req, res) { | ||
| 97 | - if (!req.body.text) | ||
| 98 | - return console.log('Text key is missing'); | ||
| 99 | - | ||
| 100 | - var id = shortid.generate(); | ||
| 101 | - var text = req.body.text; | ||
| 102 | - sendToQueue(id, text, 'texts', false, res); | ||
| 103 | - sendToQueue(id, text, 'log', true, res); | ||
| 104 | - receiveFromQueue(id, 'glosses', false, res); | ||
| 105 | -}); | 31 | +app.use('/video', express.static(process.env.VLIBRAS_VIDEO_LIBRAS)); |
| 106 | 32 | ||
| 107 | /** | 33 | /** |
| 108 | - * OLD VERSION | 34 | + * Allow cross origin requests. |
| 109 | */ | 35 | */ |
| 110 | -router.get('/', function(req, res) { | ||
| 111 | - var texto = req.param('text').toString('utf8'); | ||
| 112 | - var id = shortid.generate(); | ||
| 113 | - sendToQueue(id, texto, 'texts', false, res); | ||
| 114 | - sendToQueue(id, texto, 'log', true, res); | ||
| 115 | - receiveFromQueue(id, 'glosses', false, res); | 36 | +app.use(function(req, res, next) { |
| 37 | + res.setHeader("Access-Control-Allow-Methods", "POST, GET"); | ||
| 38 | + res.header("Access-Control-Allow-Origin", "http://localhost:80"); | ||
| 39 | + res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); | ||
| 40 | + next(); | ||
| 116 | }); | 41 | }); |
| 117 | 42 | ||
| 118 | /** | 43 | /** |
| 119 | - * Register routes with prefix '/translate'. | 44 | + * Register routes. |
| 120 | */ | 45 | */ |
| 121 | -app.use('/translate', router); | 46 | +app.use('/translate', translate); |
| 47 | +app.use('/video', video); | ||
| 122 | 48 | ||
| 123 | /** | 49 | /** |
| 124 | * Error handler. | 50 | * Error handler. |
| @@ -0,0 +1,44 @@ | @@ -0,0 +1,44 @@ | ||
| 1 | +/** | ||
| 2 | + * Author: Wesnydy Lima Ribeiro | ||
| 3 | + * Email: wesnydy@lavid.ufpb.br | ||
| 4 | + */ | ||
| 5 | + | ||
| 6 | +'use strict'; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * Required libs. | ||
| 10 | + */ | ||
| 11 | +var shortid = require('shortid') | ||
| 12 | + , amqp = require('../helpers/amqpManager'); | ||
| 13 | + | ||
| 14 | +exports.translate = function(req, res) { | ||
| 15 | + | ||
| 16 | + var body = {}; | ||
| 17 | + var id = shortid.generate(); | ||
| 18 | + | ||
| 19 | + if (!req.body.text) | ||
| 20 | + return console.log('Text key is missing'); | ||
| 21 | + | ||
| 22 | + body.text = req.body.text; | ||
| 23 | + body.type = 'gloss'; | ||
| 24 | + | ||
| 25 | + amqp.sendToQueue(body, id,'texts', false, res); | ||
| 26 | + amqp.sendToQueue(body, id,'logs', true, res); | ||
| 27 | + amqp.receiveFromQueue(id, 'glosses', false, res); | ||
| 28 | +}; | ||
| 29 | + | ||
| 30 | +exports.urltranslate = function(req, res) { | ||
| 31 | + | ||
| 32 | + var body = {}; | ||
| 33 | + var id = shortid.generate(); | ||
| 34 | + | ||
| 35 | + if (!req.body.text) | ||
| 36 | + return console.log('Text key missing'); | ||
| 37 | + | ||
| 38 | + body.text = req.param('text').toString('utf8'); | ||
| 39 | + body.type = 'gloss'; | ||
| 40 | + | ||
| 41 | + amqp.sendToQueue(body, id, 'texts', false, res); | ||
| 42 | + amqp.sendToQueue(body, id, 'logs', true, res); | ||
| 43 | + amqp.receiveFromQueue(id, 'glosses', false, res); | ||
| 44 | +}; |
| @@ -0,0 +1,28 @@ | @@ -0,0 +1,28 @@ | ||
| 1 | +/** | ||
| 2 | + * Author: Wesnydy Lima Ribeiro | ||
| 3 | + * Email: wesnydy@lavid.ufpb.br | ||
| 4 | + */ | ||
| 5 | + | ||
| 6 | +'use strict'; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * Required libs. | ||
| 10 | + */ | ||
| 11 | +var shortid = require('shortid') | ||
| 12 | + , amqp = require('../helpers/amqpManager'); | ||
| 13 | + | ||
| 14 | +exports.createVideo = function(req, res) { | ||
| 15 | + | ||
| 16 | + var body = {}; | ||
| 17 | + var id = shortid.generate(); | ||
| 18 | + | ||
| 19 | + if (!req.body.text) | ||
| 20 | + return console.log('Text key missing'); | ||
| 21 | + | ||
| 22 | + body.text = req.body.text; | ||
| 23 | + body.type = 'video'; | ||
| 24 | + | ||
| 25 | + amqp.sendToQueue(body, id, 'texts', false, res); | ||
| 26 | + amqp.sendToQueue(body, id, 'logs', true, res); | ||
| 27 | + amqp.receiveFromQueue(id, 'videos', false, res); | ||
| 28 | +}; |
| @@ -0,0 +1,75 @@ | @@ -0,0 +1,75 @@ | ||
| 1 | +/** | ||
| 2 | + * Author: Wesnydy Lima Ribeiro | ||
| 3 | + * Email: wesnydy@lavid.ufpb.br | ||
| 4 | + */ | ||
| 5 | + | ||
| 6 | +'use strict'; | ||
| 7 | + | ||
| 8 | +/** | ||
| 9 | + * Required libs. | ||
| 10 | + */ | ||
| 11 | +var amqplib = require('amqplib/callback_api'); | ||
| 12 | + | ||
| 13 | +/** | ||
| 14 | + * Function to send text to the queue. | ||
| 15 | + */ | ||
| 16 | +exports.sendToQueue = function(body, id, queue, durability, res) { | ||
| 17 | + | ||
| 18 | + amqplib.connect('amqp://localhost', function(err, conn) { | ||
| 19 | + if(err) { | ||
| 20 | + res.json({message : err}); | ||
| 21 | + throw err; | ||
| 22 | + } | ||
| 23 | + conn.createChannel(function(err, ch) { | ||
| 24 | + if(err) { | ||
| 25 | + res.json({message : err}); | ||
| 26 | + throw err; | ||
| 27 | + } | ||
| 28 | + ch.assertQueue(queue, {durable : durability}); | ||
| 29 | + ch.sendToQueue(queue, new Buffer(JSON.stringify(body)), {correlationId : id}); | ||
| 30 | + try { | ||
| 31 | + ch.close(); | ||
| 32 | + } | ||
| 33 | + catch (alreadyClosed) { | ||
| 34 | + console.log(alreadyClosed.stackAtStateChange); | ||
| 35 | + } | ||
| 36 | + }); | ||
| 37 | + setTimeout(function() { conn.close(); }, 500000); | ||
| 38 | + }); | ||
| 39 | +}; | ||
| 40 | + | ||
| 41 | +/** | ||
| 42 | + * Function to receive gloss from the queue. | ||
| 43 | + */ | ||
| 44 | +exports.receiveFromQueue = function(id, queue, durability, res) { | ||
| 45 | + | ||
| 46 | + amqplib.connect('amqp://localhost', function(err, conn) { | ||
| 47 | + if(err) { | ||
| 48 | + res.json({message : err}); | ||
| 49 | + throw err; | ||
| 50 | + } | ||
| 51 | + conn.createChannel(function(err, ch) { | ||
| 52 | + if(err){ | ||
| 53 | + res.json({message : err}); | ||
| 54 | + throw err; | ||
| 55 | + } | ||
| 56 | + ch.assertQueue(queue, {durable : durability}); | ||
| 57 | + ch.consume(queue, function(msg) { | ||
| 58 | + if (msg.properties.correlationId === id) { | ||
| 59 | + ch.ack(msg); | ||
| 60 | + res.send(msg.content.toString()) | ||
| 61 | + try { | ||
| 62 | + ch.close(); | ||
| 63 | + } | ||
| 64 | + catch (alreadyClosed) { | ||
| 65 | + console.log(alreadyClosed.stackAtStateChange); | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | + else { | ||
| 69 | + ch.reject(msg); | ||
| 70 | + } | ||
| 71 | + }, {noAck : false}); | ||
| 72 | + }); | ||
| 73 | + setTimeout(function() { conn.close(); }, 500000); | ||
| 74 | + }); | ||
| 75 | +}; |
| @@ -0,0 +1,17 @@ | @@ -0,0 +1,17 @@ | ||
| 1 | +/** | ||
| 2 | + * Author: Wesnydy Lima Ribeiro | ||
| 3 | + * Email: wesnydy@lavid.ufpb.br | ||
| 4 | + */ | ||
| 5 | + | ||
| 6 | +var express = require('express') | ||
| 7 | + , router = express.Router() | ||
| 8 | + , translateController = require('../controllers/translate'); | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * Routes to process text and return gloss. | ||
| 12 | + */ | ||
| 13 | +router | ||
| 14 | + .get('/', translateController.urltranslate) | ||
| 15 | + .post('/', translateController.translate) | ||
| 16 | + | ||
| 17 | +module.exports = router; |
| @@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
| 1 | +/** | ||
| 2 | + * Author: Wesnydy Lima Ribeiro | ||
| 3 | + * Email: wesnydy@lavid.ufpb.br | ||
| 4 | + */ | ||
| 5 | + | ||
| 6 | +var express = require('express') | ||
| 7 | + , router = express.Router() | ||
| 8 | + , videoController = require('../controllers/video'); | ||
| 9 | + | ||
| 10 | +/** | ||
| 11 | + * Route to process text and create video. | ||
| 12 | + */ | ||
| 13 | +router | ||
| 14 | + .post('/', videoController.createVideo) | ||
| 15 | + | ||
| 16 | +module.exports = router; |