Skip to content

Commit cfa3903

Browse files
author
Rokas Lengvenis
committed
initial commit
0 parents  commit cfa3903

File tree

16 files changed

+1481
-0
lines changed

16 files changed

+1481
-0
lines changed

.gitignore

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.idea/
2+
node_modules/
3+

.idea/vcs.xml

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

bin/www

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/usr/bin/env node
2+
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
var app = require('../src/app');
8+
var debug = require('debug')('survey-app-backend:server');
9+
var http = require('http');
10+
11+
/**
12+
* Get port from environment and store in Express.
13+
*/
14+
15+
var port = normalizePort(process.env.PORT || '3000');
16+
app.set('port', port);
17+
18+
/**
19+
* Create HTTP server.
20+
*/
21+
22+
var server = http.createServer(app);
23+
24+
/**
25+
* Listen on provided port, on all network interfaces.
26+
*/
27+
28+
server.listen(port);
29+
server.on('error', onError);
30+
server.on('listening', onListening);
31+
32+
/**
33+
* Normalize a port into a number, string, or false.
34+
*/
35+
36+
function normalizePort(val) {
37+
var port = parseInt(val, 10);
38+
39+
if (isNaN(port)) {
40+
// named pipe
41+
return val;
42+
}
43+
44+
if (port >= 0) {
45+
// port number
46+
return port;
47+
}
48+
49+
return false;
50+
}
51+
52+
/**
53+
* Event listener for HTTP server "error" event.
54+
*/
55+
56+
function onError(error) {
57+
if (error.syscall !== 'listen') {
58+
throw error;
59+
}
60+
61+
var bind = typeof port === 'string'
62+
? 'Pipe ' + port
63+
: 'Port ' + port;
64+
65+
// handle specific listen errors with friendly messages
66+
switch (error.code) {
67+
case 'EACCES':
68+
console.error(bind + ' requires elevated privileges');
69+
process.exit(1);
70+
break;
71+
case 'EADDRINUSE':
72+
console.error(bind + ' is already in use');
73+
process.exit(1);
74+
break;
75+
default:
76+
throw error;
77+
}
78+
}
79+
80+
/**
81+
* Event listener for HTTP server "listening" event.
82+
*/
83+
84+
function onListening() {
85+
var addr = server.address();
86+
var bind = typeof addr === 'string'
87+
? 'pipe ' + addr
88+
: 'port ' + addr.port;
89+
debug('Listening on ' + bind);
90+
}

package.json

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"name": "survey-app-backend",
3+
"version": "0.0.0",
4+
"private": true,
5+
"scripts": {
6+
"start": "babel-node --presets es2015 ./bin/www"
7+
},
8+
"dependencies": {
9+
"babel-preset-es2015": "^6.24.1",
10+
"body-parser": "~1.18.2",
11+
"cookie-parser": "~1.4.3",
12+
"cuid": "^1.3.8",
13+
"debug": "~2.6.9",
14+
"express": "~4.15.5",
15+
"jade": "~1.11.0",
16+
"mongoose": "^4.12.1",
17+
"morgan": "~1.9.0",
18+
"sanitize-html": "^1.14.1",
19+
"serve-favicon": "~2.4.5"
20+
}
21+
}

public/stylesheets/style.css

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
body {
2+
padding: 50px;
3+
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
4+
}
5+
6+
a {
7+
color: #00B7FF;
8+
}

src/app.js

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
var express = require('express');
2+
var path = require('path');
3+
var favicon = require('serve-favicon');
4+
var logger = require('morgan');
5+
var cookieParser = require('cookie-parser');
6+
var bodyParser = require('body-parser');
7+
import mongoose from 'mongoose';
8+
9+
import index from './routes/index';
10+
import users from './routes/users';
11+
import dummyData from './dummyData';
12+
import serverConfig from './config';
13+
14+
// Set native promises as mongoose promise
15+
mongoose.Promise = global.Promise;
16+
17+
// MongoDB Connection
18+
mongoose.connect(serverConfig.mongoURL, (error) => {
19+
if (error) {
20+
console.error('Please make sure Mongodb is installed and running!'); // eslint-disable-line no-console
21+
throw error;
22+
}
23+
24+
// feed some dummy data in DB.
25+
dummyData();
26+
});
27+
28+
var app = express();
29+
30+
// view engine setup
31+
app.set('views', path.join(__dirname, 'views'));
32+
app.set('view engine', 'jade');
33+
34+
// uncomment after placing your favicon in /public
35+
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
36+
app.use(logger('dev'));
37+
app.use(bodyParser.json());
38+
app.use(bodyParser.urlencoded({ extended: false }));
39+
app.use(cookieParser());
40+
app.use(express.static(path.join(__dirname, 'public')));
41+
42+
app.use('/', index);
43+
app.use('/', users);
44+
45+
// catch 404 and forward to error handler
46+
app.use(function(req, res, next) {
47+
var err = new Error('Not Found');
48+
err.status = 404;
49+
next(err);
50+
});
51+
52+
// error handler
53+
app.use(function(err, req, res, next) {
54+
// set locals, only providing error in development
55+
res.locals.message = err.message;
56+
res.locals.error = req.app.get('env') === 'development' ? err : {};
57+
58+
// render the error page
59+
res.status(err.status || 500);
60+
res.render('error');
61+
});
62+
63+
module.exports = app;

src/config.js

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
const config = {
2+
mongoURL: process.env.MONGO_URL || 'mongodb://localhost:27017/survey-db',
3+
port: process.env.PORT || 8000,
4+
};
5+
6+
export default config;

src/controllers/user.controller.js

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import User from '../models/user';
2+
import cuid from 'cuid';
3+
import sanitizeHtml from 'sanitize-html';
4+
5+
/**
6+
* Get all posts
7+
* @param req
8+
* @param res
9+
* @returns void
10+
*/
11+
export function getUsers(req, res) {
12+
User.find().exec((err, users) => {
13+
if (err) {
14+
res.status(500).send(err);
15+
}
16+
res.json({users});
17+
});
18+
}
19+
20+
/**
21+
* Save a post
22+
* @param req
23+
* @param res
24+
* @returns void
25+
*/
26+
export function addUser(req, res) {
27+
if (!req.body.user.id || !req.body.user.username) {
28+
res.status(403).end();
29+
}
30+
31+
const newUser = new User(req.body.user);
32+
33+
// Let's sanitize inputs
34+
newUser.id = sanitizeHtml(newUser.id);
35+
newUser.username = sanitizeHtml(newUser.username);
36+
37+
newUser.cuid = cuid();
38+
newUser.save((err, saved) => {
39+
if (err) {
40+
res.status(500).send(err);
41+
}
42+
res.json({user: saved});
43+
});
44+
}
45+

src/dummyData.js

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
import User from './models/user';
2+
3+
export default () => {
4+
User.count().exec((err, count) => {
5+
if (count > 0) {
6+
return;
7+
}
8+
9+
const user1 = new User({
10+
name: 'Admin'
11+
});
12+
const user2 = new User({
13+
name: 'Admin'
14+
});
15+
16+
User.create([user1, user2], (error) => {
17+
if (!error) {
18+
console.log('ready to go....');
19+
}
20+
});
21+
});
22+
}

src/models/user.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import mongoose from 'mongoose';
2+
3+
const Schema = mongoose.Schema;
4+
5+
const userSchema = new Schema({
6+
name: {type: 'String', required: true}
7+
});
8+
9+
export default mongoose.model('User', userSchema);

src/routes/index.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
var express = require('express');
2+
var router = express.Router();
3+
4+
/* GET home page. */
5+
router.get('/', function(req, res, next) {
6+
res.render('index', { title: 'Express' });
7+
});
8+
9+
module.exports = router;

src/routes/users.js

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Router } from 'express';
2+
import * as UserController from '../controllers/user.controller';
3+
4+
const router = new Router();
5+
6+
/* GET users listing. */
7+
router.route('/users').get(UserController.getUsers);
8+
9+
export default router;

src/views/error.jade

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
extends layout
2+
3+
block content
4+
h1= message
5+
h2= error.status
6+
pre #{error.stack}

src/views/index.jade

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
extends layout
2+
3+
block content
4+
h1= title
5+
p Welcome to #{title}

src/views/layout.jade

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
doctype html
2+
html
3+
head
4+
title= title
5+
link(rel='stylesheet', href='/stylesheets/style.css')
6+
body
7+
block content

0 commit comments

Comments
 (0)