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 | 11 | /** |
| 12 | 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 | 20 | var app = express(); |
| 23 | -var router = express.Router(); | |
| 24 | 21 | |
| 25 | 22 | /** |
| 26 | 23 | * For parsing application/json and application/x-www-form-urlencoded |
| ... | ... | @@ -29,96 +26,25 @@ app.use(bodyParser.json()); |
| 29 | 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 | 50 | * Error handler. | ... | ... |
| ... | ... | @@ -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 @@ |
| 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 @@ |
| 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 @@ |
| 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 @@ |
| 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; | ... | ... |