UNPKG

2.93 kBJavaScriptView Raw
1var express = require('express');
2var path = require('path');
3var favicon = require('static-favicon');
4var logger = require('morgan');
5var cookieParser = require('cookie-parser');
6var bodyParser = require('body-parser');
7var Busboy = require('busboy');
8var debug = require('debug')('lab');
9
10var routes = require('./routes/index');
11
12var app = express();
13
14// view engine setup
15app.set('views', path.join(__dirname, 'views'));
16app.set('view engine', 'jade');
17
18app.use(favicon());
19app.use(logger('dev'));
20app.use(bodyParser.json());
21app.use(bodyParser.urlencoded());
22app.use(cookieParser());
23app.use(express.static(path.join(__dirname, 'public')));
24
25var RE_MIME = /^(?:multipart\/.+)|(?:application\/x-www-form-urlencoded)$/i;
26
27function hasBody(req) {
28 var encoding = 'transfer-encoding' in req.headers,
29 length = 'content-length' in req.headers
30 && req.headers['content-length'] !== '0';
31 return encoding || length;
32};
33
34function mime(req) {
35 var str = req.headers['content-type'] || '';
36 return str.split(';')[0];
37};
38
39// busboy
40app.use(function (req, res, next) {
41
42 if (req.busboy
43 || req.method === 'GET'
44 || req.method === 'HEAD'
45 || !hasBody(req)
46 || !RE_MIME.test(mime(req)))
47 return next();
48
49 var busboy = req.busboy = new Busboy({ headers: req.headers, immediate: true });
50
51 busboy.on('file', function(fieldname, file, filename, encoding, mimetype) {
52 console.log('File [' + fieldname + ']: filename: ' + filename + ', encoding: ' + encoding);
53 file.on('data', function(data) {
54 console.log('File [' + fieldname + '] got ' + data.length + ' bytes');
55 });
56 file.on('end', function() {
57 console.log('File [' + fieldname + '] Finished');
58 });
59 });
60
61 busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated) {
62 console.log('Field [' + fieldname + ']: value: ' + inspect(val));
63 });
64
65 busboy.on('finish', function() {
66 console.log('Done parsing form!');
67 res.send('Parsed');
68 });
69
70 req.pipe(req.busboy);
71
72});
73
74app.use('/', routes);
75
76/// catch 404 and forward to error handler
77app.use(function(req, res, next) {
78 var err = new Error('Not Found');
79 err.status = 404;
80 next(err);
81});
82
83/// error handlers
84
85// development error handler
86// will print stacktrace
87if (app.get('env') === 'development') {
88 app.use(function(err, req, res, next) {
89 res.status(err.status || 500);
90 res.render('error', {
91 message: err.message,
92 error: err
93 });
94 });
95}
96
97// production error handler
98// no stacktraces leaked to user
99app.use(function(err, req, res, next) {
100 res.status(err.status || 500);
101 res.render('error', {
102 message: err.message,
103 error: {}
104 });
105});
106
107
108module.exports = app;
109
110app.set('port', process.env.PORT || 3000);
111
112var server = app.listen(app.get('port'), function() {
113 debug('Express server listening on port ' + server.address().port);
114});
115
116