*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.