Skip to content

Commit

Permalink
multipart no longer depends on Promise
Browse files Browse the repository at this point in the history
  • Loading branch information
ry committed Feb 21, 2010
1 parent daacb81 commit 5fbc750
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 15 deletions.
21 changes: 12 additions & 9 deletions doc/api.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1254,18 +1254,21 @@ Node. To use it, +require("multipart")+.
+
See the Stream class below.

+multipart.cat(message)+ ::
Returns a promise.
- on success: Returns a multipart.Stream object representing the completed
message. The body of each part is saved on the `body` member.
- on error: Returns an instanceof Error object. This indicates
that the message was malformed in some way.
+multipart.cat(message, callback)+ ::
On success, +callback+ is called with +(null, stream)+ where +stream+ is a
+multipart.Stream+ object representing the completed message. The body of
each part is saved on the `body` member.
+
*Note*: This function saves the *entire* message into memory. As such,
it is ill-suited to parsing actual incoming messages from an HTTP request!
On error, +callback+ is called with +(err)+ where +err+ is an instanceof
the +Error+ object. This indicates that the message was malformed in some
way.
+
*Note*: This function saves the *entire* message into memory. As such, it
is ill-suited to parsing actual incoming messages from an HTTP request!
If a user uploads a very large file, then it may cause serious problems.
No checking is done to ensure that the file does not overload the memory.
Only use multipart.cat with known and trusted input!
Only use +multipart.cat+ with known and trusted input!


=== +multipart.Stream+

Expand Down
14 changes: 8 additions & 6 deletions lib/multipart.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,8 @@ function parse (message) {
// rack up as much memory usage as they can manage. This function
// buffers the whole message, which is very convenient, but also
// very much the wrong thing to do in most cases.
function cat (message) {
var p = new (events.Promise),
stream = parse(message);
function cat (message, callback) {
var stream = parse(message);
stream.files = {};
stream.fields = {};
stream.addListener("partBegin", function (part) {
Expand All @@ -49,9 +48,12 @@ function cat (message) {
stream.addListener("body", function (chunk) {
stream.part.body = (stream.part.body || "") + chunk;
});
stream.addListener("error", function (e) { p.emitError(e) });
stream.addListener("complete", function () { p.emitSuccess(stream) });
return p;
stream.addListener("error", function (e) { p.emitError(e)
if (callback) callback(e);
});
stream.addListener("complete", function () {
if (callback) callback(null, stream);
});
};

// events:
Expand Down

0 comments on commit 5fbc750

Please sign in to comment.