Skip to content

Commit 5f7872d

Browse files
committed
initial commit
0 parents  commit 5f7872d

File tree

10 files changed

+588
-0
lines changed

10 files changed

+588
-0
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
node_modules

app.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
var express = require('express')
2+
, gridfs = require('./gridfs')
3+
, mongoose = require('mongoose')
4+
5+
mongoose.connect('mongodb://localhost/test')
6+
7+
var app = module.exports = express.createServer();
8+
9+
// Configuration
10+
11+
app.configure(function(){
12+
app.set('views', __dirname + '/views');
13+
app.set('view engine', 'jade');
14+
app.use(express.bodyParser());
15+
app.use(express.methodOverride());
16+
app.use(app.router);
17+
app.use(express.static(__dirname + '/public'));
18+
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
19+
});
20+
21+
// model
22+
23+
var DudeSchema = new mongoose.Schema({
24+
name: String
25+
, files: [mongoose.Schema.Mixed]
26+
});
27+
DudeSchema.methods.addFile = function(file, options, fn){
28+
var dude = this;
29+
console.log(file)
30+
gridfs.putFile(file.path, file.filename, options, function(err, result){
31+
dude.files.push(result);
32+
dude.save(fn);
33+
});
34+
35+
}
36+
var Dude = mongoose.model('Dude',DudeSchema);
37+
38+
// Routes
39+
40+
app.get('/', function(req, res){
41+
Dude.find({}, function(err, dudes){
42+
res.render('index', { title: 'Express', dudes:dudes })
43+
});
44+
});
45+
46+
app.post('/new', function(req, res){
47+
var dude = new Dude();
48+
49+
dude.name = req.body.name
50+
dude.addFile(req.files.file, {content_type:req.files.file.type}, function(err, result){
51+
res.redirect('/');
52+
});
53+
});
54+
55+
app.get('/file/:id', function(req, res){
56+
gridfs.pipe(req.params.id, process.stdout);
57+
});
58+
59+
60+
app.listen(3000);
61+
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

gridfs.coffee

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
mongoose = require("mongoose")
2+
debug = require("debug")("gridfs")
3+
assert = require("better-assert")
4+
5+
GridStore = mongoose.mongo.GridStore
6+
Grid = mongoose.mongo.Grid
7+
8+
exports.get = (id, fn) ->
9+
##debug "fetching %s", id
10+
db = mongoose.connection.db
11+
id = new mongoose.mongo.BSONPure.ObjectID(id)
12+
store = new GridStore(db, id, "r",{root: "fs"})
13+
store.open (err, store) ->
14+
assert not err
15+
return fn(err) if err
16+
store.readBuffer fn
17+
18+
exports.put = (buf, name, fn) ->
19+
db = mongoose.connection.db
20+
##debug "saving %d bytes as %s", buf.length, name
21+
new GridStore(db, name, "w").open (err, file) ->
22+
assert not err
23+
return fn(err) if err
24+
file.write buf, true, fn
25+
26+
exports.putFile = (path, name, fn) ->
27+
db = mongoose.connection.db
28+
##debug "saving %s as %s", path, name
29+
new GridStore(db, name, "w").open (err, file) ->
30+
assert not err
31+
return fn(err) if err
32+
file.writeFile path, fn
33+
34+
exports.deleteFile = (id, fn) ->
35+
console.log "deleting " + id
36+
db = mongoose.connection.db
37+
id = new mongoose.mongo.BSONPure.ObjectID(id)
38+
store = new GridStore(db, id, "r",{root: "fs"})
39+
store.unlink (err, result) ->
40+
if err
41+
console.log err
42+
return fn(err) if err
43+
return true
44+

gridfs.js

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
var mongoose = require("mongoose")
2+
, request = require('request')
3+
4+
var GridStore = mongoose.mongo.GridStore;
5+
var Grid = mongoose.mongo.Grid;
6+
7+
exports.get = function(id, fn) {
8+
var db, store;
9+
db = mongoose.connection.db;
10+
id = new mongoose.mongo.BSONPure.ObjectID(id);
11+
store = new GridStore(db, id, "r", {
12+
root: "fs"
13+
});
14+
return store.open(function(err, store) {
15+
if (err) return fn(err);
16+
return store.readBuffer(fn);
17+
});
18+
};
19+
exports.pipe = function(id, outstream) {
20+
var db, store;
21+
db = mongoose.connection.db;
22+
id = new mongoose.mongo.BSONPure.ObjectID(id);
23+
store = new GridStore(db, id, "r", {
24+
root: "fs"
25+
});
26+
store.stream(true).pipe(outstream)
27+
};
28+
29+
exports.put = function(buf, name, fn) {
30+
var db;
31+
db = mongoose.connection.db;
32+
return new GridStore(db, name, "w").open(function(err, file) {
33+
if (err) return fn(err);
34+
return file.write(buf, true, fn);
35+
});
36+
};
37+
38+
exports.putFile = function(path, name, options, fn) {
39+
var db = mongoose.connection.db;
40+
return new GridStore(db, name, "w", options).open(function(err, file) {
41+
if (err) return fn(err);
42+
return file.writeFile(path, fn);
43+
});
44+
};
45+
46+
exports.deleteFile = function(id, fn) {
47+
var db, store;
48+
console.log("deleting " + id);
49+
db = mongoose.connection.db;
50+
id = new mongoose.mongo.BSONPure.ObjectID(id);
51+
store = new GridStore(db, id, "r", {
52+
root: "fs"
53+
});
54+
return store.unlink(function(err, result) {
55+
if (err) {
56+
console.log(err);
57+
if (err) return fn(err);
58+
}
59+
return true;
60+
});
61+
};

package.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
{
2+
"name": "application-name"
3+
, "version": "0.0.1"
4+
, "private": true
5+
, "dependencies": {
6+
"express": "2.5.4"
7+
, "jade": ">= 0.0.1"
8+
, "mongoose": "2.4.1"
9+
, "request": "2.9.3"
10+
}
11+
}

0 commit comments

Comments
 (0)