-
Notifications
You must be signed in to change notification settings - Fork 1.8k
/
gridfs.js
153 lines (138 loc) · 5.76 KB
/
gridfs.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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
GLOBAL.DEBUG = true;
test = require("assert");
var Db = require('../lib/mongodb').Db,
Connection = require('../lib/mongodb').Connection,
Server = require('../lib/mongodb').Server,
GridStore = require('../lib/mongodb').GridStore;
var host = process.env['MONGO_NODE_DRIVER_HOST'] != null ? process.env['MONGO_NODE_DRIVER_HOST'] : 'localhost';
var port = process.env['MONGO_NODE_DRIVER_PORT'] != null ? process.env['MONGO_NODE_DRIVER_PORT'] : Connection.DEFAULT_PORT;
console.log(">> Connecting to " + host + ":" + port);
var db1 = new Db('node-mongo-examples', new Server(host, port, {}), {native_parser:true});
db1.open(function(err, db) {
// Write a new file
var gridStore = new GridStore(db, "foobar", "w");
gridStore.open(function(err, gridStore) {
gridStore.write("hello world!", function(err, gridStore) {
gridStore.close(function(err, result) {
// Read the file and dump the contents
dump(db, 'foobar');
// Append more data
gridStore = new GridStore(db, 'foobar', "w+");
gridStore.open(function(err, gridStore) {
gridStore.write('\n', function(err, gridStore) {
gridStore.puts('line two', function(err, gridStore) {
gridStore.close(function(err, result) {
dump(db, 'foobar');
// Overwrite
gridStore = new GridStore(db, 'foobar', "w");
gridStore.open(function(err, gridStore) {
gridStore.write('hello, sailor!', function(err, gridStore) {
gridStore.close(function(err, result) {
dump(db, 'foobar', function() {
db.close();
});
});
});
});
});
});
});
});
});
});
});
});
var db2 = new Db('node-mongo-examples', new Server(host, port, {}), {native_parser:true});
db2.open(function(err, db) {
// File existence tests
var gridStore = new GridStore(db, "foobar2", "w");
gridStore.open(function(err, gridStore) {
gridStore.write( 'hello sailor', function(err, gridStore) {
gridStore.close(function(err, result) {
GridStore.exist(db, 'foobar2', function(err, result) {
console.log("File 'foobar2' exists: " + result);
});
GridStore.exist(db, 'does-not-exist', function(err, result) {
console.log("File 'does-not-exist' exists: " + result);
});
// Read with offset(uses seek)
GridStore.read(db, 'foobar2', 6, 7, function(err, data) {
console.log(data);
});
// Rewind/seek/tell
var gridStore2 = new GridStore(db, 'foobar2', 'w');
gridStore2.open(function(err, gridStore) {
gridStore.write('hello, world!', function(err, gridStore){});
gridStore.rewind(function(){});
gridStore.write('xyzzz', function(err, gridStore){});
gridStore.tell(function(tell) {
console.log("tell: " + tell); // Should be 5
});
gridStore.seek(4, function(err, gridStore){});
gridStore.write('y', function(){});
gridStore.close(function() {
dump(db, 'foobar2');
// Unlink file (delete)
GridStore.unlink(db, 'foobar2', function(err, gridStore) {
GridStore.exist(db, 'foobar2', function(err, result) {
console.log("File 'foobar2' exists: " + result);
db.close();
});
});
});
});
});
});
});
});
var db3 = new Db('node-mongo-examples', new Server(host, port, {}), {native_parser:true});
db3.open(function(err, db) {
// Metadata
var gridStore = new GridStore(db, "foobar3", "w");
gridStore.open(function(err, gridStore) {
gridStore.write('hello, world!', function(err, gridStore){});
gridStore.close(function(err, gridStore) {
gridStore = new GridStore(db, 'foobar3', "r");
gridStore.open(function(err, gridStore) {
console.log("contentType: " + gridStore.contentType);
console.log("uploadDate: " + gridStore.uploadDate);
console.log("chunkSize: " + gridStore.chunkSize);
console.log("metadata: " + gridStore.metadata);
});
// Add some metadata
gridStore = new GridStore(db, 'foobar3', "w+");
gridStore.open(function(err, gridStore) {
gridStore.contentType = 'text/xml';
gridStore.metadata = {'a':1};
gridStore.close(function(err, gridStore) {
// Print the metadata
gridStore = new GridStore(db, 'foobar3', "r");
gridStore.open(function(err, gridStore) {
console.log("contentType: " + gridStore.contentType);
console.log("uploadDate: " + gridStore.uploadDate);
console.log("chunkSize: " + gridStore.chunkSize);
console.log("metadata: " + gridStore.metadata);
db.close();
});
});
});
});
});
// You can also set meta data when initially writing to a file
// setting root means that the file and its chunks are stored in a different root
// collection: instead of gridfs.files and gridfs.chunks, here we use
// my_files.files and my_files.chunks
var gridStore = new GridStore(db, "foobar3", "w", {'content_type':'text/plain',
'metadata':{'a':1}, 'chunk_size': 1024*4, 'root':'my_files'});
gridStore.open(function(err, gridStore) {
gridStore.write('hello, world!', function(err, gridStore){});
gridStore.close(function() {
});
});
});
function dump(db, filename, callback) {
GridStore.read(db, filename, function(err, data) {
console.log(data);
if(callback != null) callback();
});
}