> Now why would it go and do something like that? Your call to the non-existent function is synchronous w.r.t. Express's request handling chain. This same issue came up here a couple of weeks ago. See:
https://groups.google.com/forum/#!msg/nodejs/ZfaJPYyHKoA/BgHxErk9bEUJ If you wrapped your two statements in process.nextTick() / setImmediate(), you'd be fine. -- Martin Cooper On Fri, Jul 19, 2013 at 6:52 AM, Lee <[email protected]> wrote: > *Copied from > http://stackoverflow.com/questions/17729900/node-js-domain-per-express-request-inside-another-domain > * > > I'm trying to layout a basic Node app like this... > > Cluster -> Worker -> Server Domain -> Express Request Domain > > So, if an error is thrown 18 layers deep into a call stack because someone > misspelled their name on a login form, the entire server doesn't crash. > > Here's some basic code to simulate the worker part: > > var domain, server; >> domain = require('domain'); >> server = domain.create(); >> server.on('error', function(e) { >> console.log('total meltdown...', e.stack); >> }); >> server.run(function() { >> var express = require('express')(); >> express.configure(function() { >> // Domain on EVERY request >> express.use(function(req, res, next) { >> var d = domain.create(); >> d.on('error', function(e) { >> console.log('fired REQUEST error', e.stack); >> next(e); >> }); >> d.run(next); >> }); >> // Generic error handler >> express.use(function(e, req, res, next) { >> res.status(500); >> res.end('oops'); >> }); >> // Serve the request with a blatent error >> express.get('/', function(req, res) { >> this_function_does_not_exist(); >> res.end('we will never get here'); >> }); >> }); >> // Fire 'er up >> express.listen(3000); >> }); > > > What I'm expecting... > > I curl http://localhost:3000/, get a nice little 'oops' error, and see > 'fired REQUEST error' and the error stack in the console. > > What actually happens... > > I get this both as the browser response, and in the console... > > ReferenceError: this_function_does_not_exist is not defined at >> /Stuff/test.js:38:13 at callbacks >> (/Stuff/node_modules/express/lib/router/index.js:161:37) at param >> (/Stuff/node_modules/express/lib/router/index.js:135:11) at pass >> (/Stuff/node_modules/express/lib/router/index.js:142:5) at Router._dispatch >> (/Stuff/node_modules/express/lib/router/index.js:170:5) at Object.router >> (/Stuff/node_modules/express/lib/router/index.js:33:10) at next >> (/Stuff/node_modules/express/node_modules/connect/lib/proto.js:190:15) at >> next (/Stuff/node_modules/express/node_modules/connect/lib/proto.js:192:9) >> at b (domain.js:183:18) at Domain.run (domain.js:123:23) > > > Now why would it go and do something like that? > > -- > -- > Job Board: http://jobs.nodejs.org/ > Posting guidelines: > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > You received this message because you are subscribed to the Google > Groups "nodejs" group. > To post to this group, send email to [email protected] > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > > --- > You received this message because you are subscribed to the Google Groups > "nodejs" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/groups/opt_out.
