Skip to content
Snippets Groups Projects
Commit e475a571 authored by Markus Grigull's avatar Markus Grigull
Browse files

Add file upload route and model

Allow empty widget name
parent 7f0c9770
No related branches found
No related tags found
No related merge requests found
# NodeJS
node_modules/
npm-debug.log
public/*
# OS X
.DS_Store
/**
* File: file.js
* Author: Markus Grigull <mgrigull@eonerc.rwth-aachen.de>
* Date: 25.01.2017
* Copyright: 2016, Institute for Automation of Complex Power Systems, EONERC
* This file is part of VILLASweb. All Rights Reserved. Proprietary and confidential.
* Unauthorized copying of this file, via any medium is strictly prohibited.
**********************************************************************************/
// include
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// file model
var fileSchema = new Schema({
name: { type: String },
path: { type: String, required: true },
type: { type: String },
user: { type: Schema.Types.ObjectId, ref: 'User', required: true },
date: { type: Date, default: Date.now }
});
module.exports = mongoose.model('File', fileSchema);
......@@ -23,7 +23,8 @@ var userSchema = new Schema({
role: { type: String, required: true, default: 'user' },
projects: [{ type: Schema.Types.ObjectId, ref: 'Project', default: [] }],
mail: { type: String, default: "" },
simulations: [{ type: Schema.Types.ObjectId, ref: 'Simulation', default: [] }]
simulations: [{ type: Schema.Types.ObjectId, ref: 'Simulation', default: [] }],
files: [{type: Schema.Types.ObjectId, ref: 'File', default: [] }]
});
userSchema.methods.verifyPassword = function(password, callback) {
......
......@@ -14,7 +14,7 @@ var Schema = mongoose.Schema;
// widget model
var widgetSchema = new Schema({
name: { type: String, required: true },
name: { type: String },
widgetData: { type: Schema.Types.Mixed, default: {} },
width: { type: Number, required: true },
height: { type: Number, required: true },
......
{
"name": "VILLASweb-backend",
"version": "0.1.0",
"version": "0.1.1",
"private": true,
"main": "server.js",
"dependencies": {
......@@ -8,6 +8,7 @@
"body-parser": "^1.15.2",
"cors": "^2.7.1",
"express": "^4.14.0",
"formidable": "^1.0.17",
"jsonwebtoken": "^7.0.1",
"mongoose": "^4.5.1",
"morgan": "^1.7.0"
......
/**
* File: files.js
* Author: Markus Grigull <mgrigull@eonerc.rwth-aachen.de>
* Date: 25.01.2017
* Copyright: 2016, Institute for Automation of Complex Power Systems, EONERC
* This file is part of VILLASweb. All Rights Reserved. Proprietary and confidential.
* Unauthorized copying of this file, via any medium is strictly prohibited.
**********************************************************************************/
// include
var express = require('express');
var auth = require('../auth');
// models
var File = require('../models/file');
var User = require('../models/user');
// create router
var router = express.Router();
// all file routes need authentication
router.use('/files', auth.validateToken);
// routes
router.get('/files/:id', function(req, res) {
File.findOne({ _id: req.params.id }, function(err, file) {
if (err) {
return res.status(400).send(err);
}
res.send({ file: file });
});
});
module.exports = router;
/**
* File: upload.js
* Author: Markus Grigull <mgrigull@eonerc.rwth-aachen.de>
* Date: 05.12.2016
* Copyright: 2016, Institute for Automation of Complex Power Systems, EONERC
* This file is part of VILLASweb. All Rights Reserved. Proprietary and confidential.
* Unauthorized copying of this file, via any medium is strictly prohibited.
**********************************************************************************/
// include
var express = require('express');
var path = require('path');
var formidable = require('formidable');
var fs = require('fs');
var auth = require('../auth');
var User = require('../models/user');
var File = require('../models/file');
// create router
var router = express.Router();
// serve public files
router.use(express.static(path.join(__dirname, '../public')));
// routes
router.post('/upload', auth.validateToken, function(req, res) {
// create form object
var form = new formidable.IncomingForm();
form.uploadDir = path.join(__dirname, '../public');
// register events
form.on('file', function(field, file) {
fs.rename(file.path, path.join(form.uploadDir, req.decoded._doc._id + '_' + file.name));
// find user
User.findOne({ _id: req.decoded._doc._id }, function(err, user) {
if (err) {
console.log(err);
}
// create file object
var fileObj = new File({ name: file.name, path: 'public/' + user._id + '_' + file.name, user: user._id });
fileObj.save(function(err) {
if (err) {
console.log(err);
}
user.files.push(fileObj._id);
user.save(function(err) {
if (err) {
console.log(err);
}
});
});
});
});
form.on('error', function(error) {
console.log('Error uploading file: ' + error);
res.status(403).send({ success: false, message: 'Error uploading file: ' + error });
});
form.on('end', function() {
res.send({ success: true, message: 'File uploaded' });
});
// handle the request
form.parse(req);
});
module.exports = router;
......@@ -24,6 +24,8 @@ var widgets = require('./routes/widgets');
var simulations = require('./routes/simulations');
var simulationModels = require('./routes/simulationModels');
var simulators = require('./routes/simulators');
var upload = require('./routes/upload');
var files = require('./routes/files');
var User = require('./models/user');
......@@ -47,6 +49,10 @@ app.use('/api/v1', widgets);
app.use('/api/v1', simulations);
app.use('/api/v1', simulationModels);
app.use('/api/v1', simulators);
app.use('/api/v1', upload);
app.use('/api/v1', files);
app.use('/public', express.static(__dirname + '/public'));
// catch 404 and forward to error handler
app.use(function(req, res, next) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment