javascript - How to use this node.js module in some file -
this 3rd party node-js module:
var knox = require('knox') , resource = require('deployd/lib/resource') , httputil = require('deployd/lib/util/http') , formidable = require('formidable') , fs = require('fs') , util = require('util') , path = require('path'); function s3bucket(name, options) { resource.apply(this, arguments); if (this.config.key && this.config.secret && this.config.bucket) { this.client = knox.createclient({ key: this.config.key , secret: this.config.secret , bucket: this.config.bucket }); } } util.inherits(s3bucket, resource); module.exports = s3bucket; s3bucket.label = "s3 bucket"; s3bucket.prototype.clientgeneration = true; s3bucket.events = ["upload", "get", "delete"]; s3bucket.basicdashboard = { settings: [{ name: 'bucket' , type: 'string' }, { name: 'key' , type: 'string' }, { name: 'secret' , type: 'string' }] }; s3bucket.prototype.handle = function (ctx, next) { var req = ctx.req , bucket = , domain = {url: ctx.url}; if (!this.client) return ctx.done("missing s3 configuration!"); if (req.method === "post" && !req.internal && req.headers['content-type'].indexof('multipart/form-data') === 0) { var form = new formidable.incomingform(); var remaining = 0; var files = []; var error; var uploadedfile = function(err) { if (err) { error = err; return ctx.done(err); } else if (!err) { remaining--; if (remaining <= 0) { if (req.headers.referer) { httputil.redirect(ctx.res, req.headers.referer || '/'); } else { ctx.done(null, files); } } } }; form.parse(req) .on('file', function(name, file) { remaining++; if (bucket.events.upload) { bucket.events.upload.run(ctx, {url: ctx.url, filesize: file.size, filename: file.filename}, function(err) { if (err) return uploadedfile(err); bucket.uploadfile(file.filename, file.size, file.mime, fs.createreadstream(file.path), uploadedfile); }); } else { bucket.uploadfile(file.filename, file.size, file.mime, fs.createreadstream(file.path), uploadedfile); } }) .on('error', function(err) { ctx.done(err); error = err; }); req.resume(); return; } if (req.method === "post" || req.method === "put") { domain.filesize = ctx.req.headers['content-length']; domain.filename = path.basename(ctx.url); if (this.events.upload) { this.events.upload.run(ctx, domain, function(err) { if (err) return ctx.done(err); bucket.upload(ctx, next); }); } else { this.upload(ctx, next); } } else if (req.method === "get") { if (ctx.res.internal) return next(); // has http. if (this.events.get) { this.events.get.run(ctx, domain, function(err) { if (err) return ctx.done(err); bucket.get(ctx, next); }); } else { this.get(ctx, next); } } else if (req.method === "delete") { if (this.events['delete']) { this.events['delete'].run(ctx, domain, function(err) { if (err) return ctx.done(err); bucket.del(ctx, next); }); } else { this.del(ctx, next); } } else { next(); } }; s3bucket.prototype.uploadfile = function(filename, filesize, mime, stream, fn) { var bucket = this; var headers = { 'content-length': filesize , 'content-type': mime }; this.client.putstream(stream, filename, headers, function(err, res) { if (err) return ctx.done(err); if (res.statuscode !== 200) { bucket.readstream(res, function(err, message) { fn(err || message); }); } else { fn(); } }); }; s3bucket.prototype.upload = function(ctx, next) { var bucket = , req = ctx.req; var headers = { 'content-length': req.headers['content-length'] , 'content-type': req.headers['content-type'] }; this.client.putstream(req, ctx.url, headers, function(err, res) { if (err) return ctx.done(err); if (res.statuscode !== 200) { bucket.readstream(res, function(err, message) { ctx.done(err || message); }); } else { ctx.done(); } }); req.resume(); }; s3bucket.prototype.get = function(ctx, next) { var bucket = this; var url = 'https://s3.amazonaws.com/' + this.config.bucket + ctx.url; httputil.redirect(ctx.res, url); }; s3bucket.prototype.del = function(ctx, next) { var bucket = this; this.client.deletefile(ctx.url, function(err, res) { if (err) ctx.done(err); if (res.statuscode !== 200) { bucket.readstream(res, function(err, message) { ctx.done(err || message); }); } else { ctx.done(); } }); }; s3bucket.prototype.readstream = function(stream, fn) { var buffer = ''; stream.on('data', function(data) { buffer += data; }).on('end', function() { fn(null, buffer); }).on('error', function(err) { fn(err); }); };
inside s3-amazon-aws
folder hence var s3bucket = require('s3-amazon-aws');
but, if have call handle function of module, how do that? requires 2 parameters such ctx,next. how parameters?
any appreciated.
the module exports s3bucket
constructor function. use create new object. can call handle()
method on object (since it's part of object's prototype).
var s3bucket = require('s3-amazon-aws'); var bucket = new s3bucket(name, options); bucket.handle(ctx, next)
regarding various arguments need read documentation of library.
Comments
Post a Comment