0

I've already seen Uploading images using Node.js, Express, and Mongoose but I'm using an MVC architecture with ExpressJS. In my app.coffee, I'm doing:

app.configure(function() { app.set('views', __dirname + '/views'); app.set('view engine', 'ejs'); app.use(form({ keepExtensions: true })); app.use(express.bodyParser()); app.use(express.methodOverride()); app.use(express.cookieParser()); app.use(express.session(sessionVariables)); app.use(app.router); return app.use(express.static(__dirname + '/public')); }); 

And in my controller method, I'm doing:

exports.uploadCustomersApi = function(req, res) { return console.log(req); }; 

But there appears to be no form element of req. Any ideas on what I'm doing wrong?

EDIT: POSTING MY req object

{ socket: { bufferSize: 0, fd: 6, type: 'tcp4', allowHalfOpen: true, _readWatcher: { socket: [Circular], callback: [Function: onReadable] }, destroyed: false, readable: true, _writeQueue: [], _writeQueueEncoding: [], _writeQueueFD: [], _writeQueueCallbacks: [], _writeWatcher: { socket: [Circular], callback: [Function: onWritable] }, writable: true, _writeImpl: [Function], _readImpl: [Function], _shutdownImpl: [Function], remoteAddress: '127.0.0.1', remotePort: 59808, server: { stack: [Object], connections: 6, allowHalfOpen: true, watcher: [Object], _events: [Object], httpAllowHalfOpen: false, cache: [Object], settings: [Object], redirects: {}, isCallbacks: {}, _locals: [Object], dynamicViewHelpers: [Object], errorHandlers: [], route: '/', routes: [Object], router: [Getter], __usedRouter: true, type: 'tcp4', fd: 9 }, ondrain: [Function], _idleTimeout: 120000, _idleNext: { bufferSize: 0, fd: 15, type: 'tcp4', allowHalfOpen: true, _readWatcher: [Object], destroyed: false, readable: true, _writeQueue: [], _writeQueueEncoding: [], _writeQueueFD: [], _writeQueueCallbacks: [], _writeWatcher: [Object], writable: true, _writeImpl: [Function], _readImpl: [Function], _shutdownImpl: [Function], remoteAddress: '127.0.0.1', remotePort: 59813, server: [Object], ondrain: [Function], _idleTimeout: 120000, _idleNext: [Object], _idlePrev: [Circular], _idleStart: Sun, 18 Dec 2011 18:45:05 GMT, _events: [Object], ondata: [Function], onend: [Function], _httpMessage: null }, _idlePrev: { repeat: 120, _idleNext: [Circular], _idlePrev: [Object], callback: [Function] }, _idleStart: Sun, 18 Dec 2011 18:45:07 GMT, _events: { timeout: [Function], error: [Function], close: [Function] }, ondata: [Function], onend: [Function], _httpMessage: { output: [], outputEncodings: [], writable: true, _last: false, chunkedEncoding: false, shouldKeepAlive: true, useChunkedEncodingByDefault: true, _hasBody: true, _trailer: '', finished: false, socket: [Circular], connection: [Circular], _events: [Object], _headers: [Object], _headerNames: [Object], app: [Object], req: [Circular], writeHead: [Function], end: [Function] } }, connection: { bufferSize: 0, fd: 6, type: 'tcp4', allowHalfOpen: true, _readWatcher: { socket: [Circular], callback: [Function: onReadable] }, destroyed: false, readable: true, _writeQueue: [], _writeQueueEncoding: [], _writeQueueFD: [], _writeQueueCallbacks: [], _writeWatcher: { socket: [Circular], callback: [Function: onWritable] }, writable: true, _writeImpl: [Function], _readImpl: [Function], _shutdownImpl: [Function], remoteAddress: '127.0.0.1', remotePort: 59808, server: { stack: [Object], connections: 6, allowHalfOpen: true, watcher: [Object], _events: [Object], httpAllowHalfOpen: false, cache: [Object], settings: [Object], redirects: {}, isCallbacks: {}, _locals: [Object], dynamicViewHelpers: [Object], errorHandlers: [], route: '/', routes: [Object], router: [Getter], __usedRouter: true, type: 'tcp4', fd: 9 }, ondrain: [Function], _idleTimeout: 120000, _idleNext: { bufferSize: 0, fd: 15, type: 'tcp4', allowHalfOpen: true, _readWatcher: [Object], destroyed: false, readable: true, _writeQueue: [], _writeQueueEncoding: [], _writeQueueFD: [], _writeQueueCallbacks: [], _writeWatcher: [Object], writable: true, _writeImpl: [Function], _readImpl: [Function], _shutdownImpl: [Function], remoteAddress: '127.0.0.1', remotePort: 59813, server: [Object], ondrain: [Function], _idleTimeout: 120000, _idleNext: [Object], _idlePrev: [Circular], _idleStart: Sun, 18 Dec 2011 18:45:05 GMT, _events: [Object], ondata: [Function], onend: [Function], _httpMessage: null }, _idlePrev: { repeat: 120, _idleNext: [Circular], _idlePrev: [Object], callback: [Function] }, _idleStart: Sun, 18 Dec 2011 18:45:07 GMT, _events: { timeout: [Function], error: [Function], close: [Function] }, ondata: [Function], onend: [Function], _httpMessage: { output: [], outputEncodings: [], writable: true, _last: false, chunkedEncoding: false, shouldKeepAlive: true, useChunkedEncodingByDefault: true, _hasBody: true, _trailer: '', finished: false, socket: [Circular], connection: [Circular], _events: [Object], _headers: [Object], _headerNames: [Object], app: [Object], req: [Circular], writeHead: [Function], end: [Function] } }, httpVersion: '1.1', complete: true, headers: { host: 'localhost:3000', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:8.0.1) Gecko/20100101 Firefox/8.0.1', accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 'accept-language': 'en-us,en;q=0.5', 'accept-encoding': 'gzip, deflate', 'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', connection: 'keep-alive', 'x-requested-with': 'XMLHttpRequest', 'x-file-name': 'lostCustomerList_1.csv', 'content-type': 'application/octet-stream', referer: 'http://localhost:3000/client/wizard/customers', 'content-length': '12278', cookie: 'wheel.cookie=BtKegWh26m5yNfrjnjN3h2sY.NgfTHkJ%2Fu3OenPY3euXHlU%2B818cUtqI2jyp%2FAQrcxI4', pragma: 'no-cache', 'cache-control': 'no-cache' }, trailers: {}, readable: false, url: '/api/client/wizard/uploadCustomers?qqfile=lostCustomerList_1.csv', method: 'POST', statusCode: null, client: { bufferSize: 0, fd: 6, type: 'tcp4', allowHalfOpen: true, _readWatcher: { socket: [Circular], callback: [Function: onReadable] }, destroyed: false, readable: true, _writeQueue: [], _writeQueueEncoding: [], _writeQueueFD: [], _writeQueueCallbacks: [], _writeWatcher: { socket: [Circular], callback: [Function: onWritable] }, writable: true, _writeImpl: [Function], _readImpl: [Function], _shutdownImpl: [Function], remoteAddress: '127.0.0.1', remotePort: 59808, server: { stack: [Object], connections: 6, allowHalfOpen: true, watcher: [Object], _events: [Object], httpAllowHalfOpen: false, cache: [Object], settings: [Object], redirects: {}, isCallbacks: {}, _locals: [Object], dynamicViewHelpers: [Object], errorHandlers: [], route: '/', routes: [Object], router: [Getter], __usedRouter: true, type: 'tcp4', fd: 9 }, ondrain: [Function], _idleTimeout: 120000, _idleNext: { bufferSize: 0, fd: 15, type: 'tcp4', allowHalfOpen: true, _readWatcher: [Object], destroyed: false, readable: true, _writeQueue: [], _writeQueueEncoding: [], _writeQueueFD: [], _writeQueueCallbacks: [], _writeWatcher: [Object], writable: true, _writeImpl: [Function], _readImpl: [Function], _shutdownImpl: [Function], remoteAddress: '127.0.0.1', remotePort: 59813, server: [Object], ondrain: [Function], _idleTimeout: 120000, _idleNext: [Object], _idlePrev: [Circular], _idleStart: Sun, 18 Dec 2011 18:45:05 GMT, _events: [Object], ondata: [Function], onend: [Function], _httpMessage: null }, _idlePrev: { repeat: 120, _idleNext: [Circular], _idlePrev: [Object], callback: [Function] }, _idleStart: Sun, 18 Dec 2011 18:45:07 GMT, _events: { timeout: [Function], error: [Function], close: [Function] }, ondata: [Function], onend: [Function], _httpMessage: { output: [], outputEncodings: [], writable: true, _last: false, chunkedEncoding: false, shouldKeepAlive: true, useChunkedEncodingByDefault: true, _hasBody: true, _trailer: '', finished: false, socket: [Circular], connection: [Circular], _events: [Object], _headers: [Object], _headerNames: [Object], app: [Object], req: [Circular], writeHead: [Function], end: [Function] } }, httpVersionMajor: 1, httpVersionMinor: 1, upgrade: false, originalUrl: '/api/client/wizard/uploadCustomers?qqfile=lostCustomerList_1.csv', query: { qqfile: 'lostCustomerList_1.csv' }, app: { stack: [ [Object], [Object], [Object], [Object], [Object], [Object], [Object], [Object] ], connections: 6, allowHalfOpen: true, watcher: { host: [Circular], callback: [Function] }, _events: { request: [Function], connection: [Function: connectionListener], listening: [Function] }, httpAllowHalfOpen: false, cache: { false: [Object] }, settings: { env: 'development', hints: true, views: '/Users/shamoon/Sites/rtem/views', 'view engine': 'ejs' }, redirects: {}, isCallbacks: {}, _locals: { settings: [Object], app: [Circular] }, dynamicViewHelpers: { session: [Function], flash: [Function] }, errorHandlers: [], route: '/', routes: { app: [Circular], routes: [Object], params: {}, _params: [], middleware: [Function] }, router: [Getter], __usedRouter: true, type: 'tcp4', fd: 9 }, res: { output: [], outputEncodings: [], writable: true, _last: false, chunkedEncoding: false, shouldKeepAlive: true, useChunkedEncodingByDefault: true, _hasBody: true, _trailer: '', finished: false, socket: { bufferSize: 0, fd: 6, type: 'tcp4', allowHalfOpen: true, _readWatcher: [Object], destroyed: false, readable: true, _writeQueue: [], _writeQueueEncoding: [], _writeQueueFD: [], _writeQueueCallbacks: [], _writeWatcher: [Object], writable: true, _writeImpl: [Function], _readImpl: [Function], _shutdownImpl: [Function], remoteAddress: '127.0.0.1', remotePort: 59808, server: [Object], ondrain: [Function], _idleTimeout: 120000, _idleNext: [Object], _idlePrev: [Object], _idleStart: Sun, 18 Dec 2011 18:45:07 GMT, _events: [Object], ondata: [Function], onend: [Function], _httpMessage: [Circular] }, connection: { bufferSize: 0, fd: 6, type: 'tcp4', allowHalfOpen: true, _readWatcher: [Object], destroyed: false, readable: true, _writeQueue: [], _writeQueueEncoding: [], _writeQueueFD: [], _writeQueueCallbacks: [], _writeWatcher: [Object], writable: true, _writeImpl: [Function], _readImpl: [Function], _shutdownImpl: [Function], remoteAddress: '127.0.0.1', remotePort: 59808, server: [Object], ondrain: [Function], _idleTimeout: 120000, _idleNext: [Object], _idlePrev: [Object], _idleStart: Sun, 18 Dec 2011 18:45:07 GMT, _events: [Object], ondata: [Function], onend: [Function], _httpMessage: [Circular] }, _events: { finish: [Function] }, _headers: { 'x-powered-by': 'Express' }, _headerNames: { 'x-powered-by': 'X-Powered-By' }, app: { stack: [Object], connections: 6, allowHalfOpen: true, watcher: [Object], _events: [Object], httpAllowHalfOpen: false, cache: [Object], settings: [Object], redirects: {}, isCallbacks: {}, _locals: [Object], dynamicViewHelpers: [Object], errorHandlers: [], route: '/', routes: [Object], router: [Getter], __usedRouter: true, type: 'tcp4', fd: 9 }, req: [Circular], writeHead: [Function], end: [Function] }, next: [Function: next], body: {}, originalMethod: 'POST', cookies: { 'wheel.cookie': 'BtKegWh26m5yNfrjnjN3h2sY.NgfTHkJ/u3OenPY3euXHlU+818cUtqI2jyp/AQrcxI4' }, sessionStore: { db: { databaseName: 'rtem', serverConfig: [Object], options: {}, native_parser: undefined, bson_serializer: [Object], bson_deserializer: [Object], state: 'connected', pkFactory: [Object], forceServerObjectId: false, operationTimeout: 1000, strict: false, notReplied: {}, isInitializing: true, auths: [], logger: [Object], slaveOk: false, tag: 1324233903416, _mongodbHandlers: [Object], eventHandlers: [Object], serializeFunctions: false, raw: false, retryMiliSeconds: 5000, numberOfRetries: 5, reaperInterval: 1000, reaperTimeout: 30000, reaperIntervalId: [Object] }, db_collection_name: 'sessions', _get_collection: [Function], hash: [Function], generate: [Function], collection: { db: [Object], collectionName: 'sessions', opts: {}, slaveOk: false, serializeFunctions: false, raw: false, pkFactory: [Object], hint: [Getter/Setter] } }, sessionID: 'BtKegWh26m5yNfrjnjN3h2sY.NgfTHkJ/u3OenPY3euXHlU+818cUtqI2jyp/AQrcxI4', _events: { data: [Function], end: [Function] }, session: { lastAccess: 1324233907666, cookie: { path: '/', httpOnly: true, _expires: Sun, 18 Dec 2011 22:45:05 GMT, originalMaxAge: 14399999 }, flash: {}, authenticator: { _id: '4ee4e47e66634f503b11ecad', email: '[email protected]', name: 'test', password: 'test', addedOn: '2011-12-18T16:55:40.003Z', client: [Object], status: 'client' } }, _route_index: 6, route: { path: '/api/client/wizard/uploadCustomers', method: 'post', callbacks: [ [Function] ], keys: [], regexp: /^\/api\/client\/wizard\/uploadCustomers\/?$/i, params: [] }, params: [] } 

1 Answer 1

2

This module is now deprecated and will eventually be removed, Connect >= 1.8.0 bodyParser() supports multipart/form-data, populating req.body much like application/json. An alternative to the core's bodyParser() is parted.

connect-form is deprecated. Use the body parser, it understands multipart/form-data.

Specifically, bodyParser will write to req.files. Go read the bodyParser example

Sign up to request clarification or add additional context in comments.

6 Comments

Tried that - nada... form = require 'connect-form'. Apologies for not being clearer.
Fantastic! Just upgraded my Express to 2.5.2 which uses connect 1.8.3. But I still can't seem to get the file upload data. How do I retrieve it?
I added my response object. Still don't see any req.files
@Shamoon firstly your header is 'content-type': 'application/octet-stream' rather then multipart/form-data. You may want to fix your XHR using .overrideMimeType('multipart/form-data'). Or fix your XHR send method passing a FormData object instead of a string or whatever. i.e. we need to see your client side XHR
Fixed it! Just one more thing.. I have the files object.. how do I actually read that?
|

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.