-
Notifications
You must be signed in to change notification settings - Fork 1
/
index.js
111 lines (98 loc) · 2.4 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
'use strict';
const Hapi = require('hapi'),
fs = require('fs'),
hapi = require('hapi'),
Inert = require('inert'),
phantom = require('phantom');
const server = new Hapi.Server();
server.connection({ port: process.env.PORT || 3000 });
server.register(require('vision'), (err) => {
server.views({
engines: {
html: require('handlebars')
},
relativeTo: __dirname,
path: 'templates'
});
});
server.route({
method: 'GET',
path: '/',
handler: function (request, reply) {
reply.view('index', {
image: "/default_image.svg",
filename: "default_image.svg"
});
}
});
server.route({
method: 'GET',
path: '/edgedetect/{filename}',
handler: function (request, reply) {
reply.view('edgedetect', {
image: "/uploads/" + request.params.filename,
filename: request.params.filename
});
}
});
server.register(Inert, function () {
server.route({
method: "GET",
path: "/{path*}",
handler: {
directory: {
path: "./public",
listing: false,
index: false
}
}
});
});
server.route({
method: 'POST',
path: '/',
config: {
payload: {
maxBytes: 209715200,
output: 'stream',
parse: true
},
handler: function (request, reply) {
var file = request.payload.image;
var filename = file.hapi.filename;
var stream = request.payload.image.pipe(fs.createWriteStream('public/uploads/' + filename));
var _ph, _page;
stream.on('finish', function () {
phantom.create()
.then(function (ph) {
_ph = ph;
return _ph.createPage();
})
.then(function (page) {
_page = page;
return _page.open("http://localhost:3000/edgedetect/" + filename);
})
.then(function (status) {
_page.render("public/output/" + filename, function() {});
return _page.property('content');
})
.then(function (content) {
fs.readFile("public/output/" + filename, function(err,data){
reply.view('index', {
image: "output/" + filename,
filename: filename
});
_page.close();
_ph.exit();
});
});
});
}
}
});
server.start((err) => {
if (err) {
throw err;
}
console.log(`Server running at: ${server.info.uri}`);
});