Also what I said is technically not 100% correct. If you have a HttpServer instance, you can intercept the request handler at the event level and match routes before the server's normal request handler gets a chance. This is how socket.io, for example, can register routes to any server instance independent to it's onRequest handler.
On Thu, Apr 19, 2012 at 10:34 AM, Tim Caswell <[email protected]> wrote: > Well, it depends on what extension points the server gives you. Remember > that node's http request handler is just a callback. > > In express this is done using the connect middleware format. Most web > frameworks already have an extension API where you can add new routes via > HTTP Verb and url pattern. > > If you're using a framework, the code you're looking for it probably > already there. If not, then you'll have to code in the extension points > yourself. > > > On Thu, Apr 19, 2012 at 10:29 AM, Masiar <[email protected]> wrote: > >> Thanks! That's a nice starting point. What I was wondering is: can I >> do this as a node.js extension? Let's say a programmer already has his >> own server created. I would like to extend whatever he did with what >> you wrote. http.createServer won't be my choice since a server already >> exists, right? How can I "add" those matched patterns (with relative >> callbacks for GET/PUT/POST/DELETE) to an already created server? >> Thanks a lot! >> >> On Apr 19, 5:24 pm, Tim Caswell <[email protected]> wrote: >> > Ok, for HTTP request pathname matching you can just use express. I'm >> > pretty sure it allows this kind of pattern matching our of the box. To >> > implement such matching yourself it easy. >> > >> > var http = require('http'); >> > var url = require('url'); >> > >> > // Match /some/folder/:id/* >> > var pattern = new RegExp("^/some/folder/([^/]+)(.*)$"); >> > >> > http.createServer(function (req, res) { >> > // pathname removes trailing query strings and gives just the path >> > var pathname = url.parse(req.url).pathname; >> > var match = pathname.match(pattern); >> > if (match) { >> > // the request matched >> > // :id is in match[1] and anything after it is in match[2]; >> > } >> > >> > }) >> > >> > What most frameworks will do is take your string like >> > "/foo/bar/:param1/:param2" and compile it into a custom regular >> expression >> > and then match on that. >> > >> > >> > >> > >> > >> > >> > >> > On Thu, Apr 19, 2012 at 10:16 AM, Masiar <[email protected]> wrote: >> > > Imagine a service that sells goods. With the extensions I would like >> > > to have a programmer able to call init() passing as parameter a path, >> > > for example '/buy/:itemId',(I'm working on a protocol I won't explain >> > > in full details), and then my extension extends that path: thus it >> > > creates paths such as '/buy/:itemId/myStuff' and listen on that path >> > > for POST, GET, DELETE, PUT. That's it. Hope that's clearer. >> > >> > > P.S. I always worked with express.js, I don't know if there is >> > > something similar to the signature ":itemId" for example, to gather >> > > all the paths to that listener with some itemId. I used that signature >> > > to let you understand what I mean. >> > >> > > On Apr 19, 2:25 pm, Tim Caswell <[email protected]> wrote: >> > > > Could you be more specific? What kind of paths are these. Are you >> > > talking >> > > > a virtual filesystem, or http request urls or something else? >> > >> > > > On Thu, Apr 19, 2012 at 3:06 AM, Masiar <[email protected]> wrote: >> > > > > Hello everybody. Sorry for the meaningless title, I would like to >> > > > > create a Node.js extension that extends the paths the programmer >> > > > > writes adding some more to integrate a protocol I'm researching >> right >> > > > > now. >> > > > > The idea is the following: the programmer writes his/her server >> with >> > > > > his paths and stuff. When initialized, my extensions should create >> > > > > some a couple of listeners on some paths, for example: >> > >> > > > > var myExtension = require('./myExtension'); >> > > > > //... >> > > > > myExtension.init(...); >> > >> > > > > and myExtension will create for example a listener to >> "/myextension/a" >> > > > > which will do something (decided by my extension). >> > > > > I wanted to know if this is somehow possible to do and if it is, >> how >> > > > > would you do that. >> > > > > Thanks, >> > >> > > > > Masiar >> > >> > > > > -- >> > > > > 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 >> > >> > > -- >> > > 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 >> >> -- >> 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 >> > > -- 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
