-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathapp.js
68 lines (51 loc) · 1.57 KB
/
app.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
var nunjucks = require('nunjucks');
var express = require('express');
var bodyParser = require('body-parser');
var fs = require('fs');
var app = express();
var Midi = require('jsmidgen');
var reload = require('require-reload')(require)
var check = require('syntax-error');
app.listen(3000);
app.use(express.static('public'))
app.use(bodyParser.json());
nunjucks.configure('views', {
autoescape: true,
express : app,
watch: true
});
app.get('/', function(req, res) {
res.render('index.html', {
title : 'Welcome to my first music maker page'
});
});
app.post('/build_music', function(request, response){
var result = {}
var fileName = "_temp.js";
fs.writeFile(fileName, request.body.jscode, function(err){
if(err) {
result = { status: "ERROR", message: "Issue writing file.", code:1 }
}else{
var src = fs.readFileSync(fileName);
var err = check(src, fileName);
if (err) {
result = { status: "ERROR", message: "Syntax Error", code:2, details: err }
}else{
try{
var temp = reload("./_temp");
var tracks = temp.main();
var file = new Midi.File();
tracks.forEach(function(track){
file.addTrack(track);
});
fs.writeFileSync('./public/songs/test.mid', file.toBytes(), 'binary');
result = { status: "OK", fileName: "test.mid" }
}
catch(ex){
result = { status: "ERROR", message: ex.toString(), code:3 }
}
}
response.send(JSON.stringify(result));
}
});
});