How to end an express.js / node POST response?

Im trying to just stop the post request after I've saved a document to the DB, ie:

app.post('/blah'), function(req,res){ //my code does a bunch of stuff res.what do i put here to tell the client browser to just... stop the POST }

At the moment im simply using res.redirect('back') which works, but the page refresh is totally arbitrary and i would prefer it didnt happen. I had a go at res.end(); but that sends the client to a blank page...

Thanks in advance.

edit:

I dont think i made myself clear enough in what im doing sorry.

Perhaps its bad practice but this is whats happening:

  1. POST initiates database save function
  2. Browser sits around waiting for a response
  3. When its good and ready, the obj is saved to the DB, then a callback triggers a NowJS function, which adds the item to the view(for everyone)

I did it this way to be non-blocking( so i thought)

-------------Problems Reply------------

You can use res.end and pass in a string that you want to be sent to the client:

res.end('It worked!');

Alternatively, you could render a view and then end the response:

res.render('blah.jade');
res.end();

All that said, redirecting the client is actually the best practice. It makes it so that when they hit the back button in their browser, they can move back seamlessly without getting any "POST required" popups or the like. This is the POST/redirect pattern and you can read more about it at http://en.wikipedia.org/wiki/Post/Redirect/Get.

While you can use the underlying end method borrowed from Node's http module, Express.js has its own send method that calls end when appropriate:

/**
* Send a response.
*
* Examples:
*
* res.send(new Buffer('wahoo'));
* res.send({ some: 'json' });
* res.send('<p>some html</p>');
* res.send(404, 'Sorry, cant find that');
* res.send(404);
*
* @param {Mixed} body or status
* @param {Mixed} body
* @return {ServerResponse}
* @api public
*/
res.send = function(body){
.
.
.

// respond
this.end(head ? null : body);
return this;
};

The client browser is waiting for a response. So why not give it one with something like res.send('<p>Thank you</p>'); or a nice rendered view?

The reason res.end() sends the client to a blank page is that you aren't giving the client anything to display.

If you could modify your client side code to make the post request via AJAX, you could simply use res.end().

The problem here is that when the browser makes a POST request (not via AJAX), it no longer cares about the current page. It is expecting a new page, so it will load a new page. This is purely with the browser, and I do not believe there is currently a way for you to work around it.

Overall, you should just use an AJAX POST request if you can.

Category:node.js Views:1 Time:2012-02-02

Related post

  • Express.js, Node.js Jade - Following the expressjs.com tutorials, and getting errors 2011-05-01

    Well I'm trying to get into Node.js / Express.js - however I've been having a few issue going through the screencast, the first issue, now resolved, was pretty obvious when it was spotted (Express.js, Node.js Jade vim). However, I'm now getting the f

  • Is there anyway Express in Node.js can have more than one static folder? 2011-08-09

    I'm working on a project where there is a user uploaded collection of styles, scripts and images and then their is my app's collection of styles, scripts and images. They're two different places on my server. Is there anyway I can setup Express in No

  • Learning Express for Node.js 2011-11-15

    Anyone have pointers to good resources for learning Express? I'm aware of the documentation and the nodetuts.com videos. Curious if there are any other good resources out there. --------------Solutions------------- If I would do it all over again wit

  • xpath: how to express text nodes? 2009-10-17

    consider: text 1 text 2 text 3 how can you express the textnode in xpath ? --------------Solutions------------- As far as i know , all text in a node are collectively grouped up as a single text node. They are not hierarchical so there wont be more t

  • How to I load a javascript file using express and node.js? 2010-10-22

    I'm trying to figure out how to load a simple javascript client-side library while using node.js and express. Any ideas? See below. HAML: %script{type: 'text/javascript', src: '/jquery-1.4.3.js'} %script{type: 'text/javascript', src: '/client.js'} ap

  • Express.js, Node.js Jade vim 2011-04-30

    Help, before I throw my beautiful, expensive MacBook Pro to the ground in a fit of annoyance. I'm trying to get something working in Expressjs, and it's really getting on my nerves. I'm following the tutorial on: expressjs.com/screencasts.html Screen

  • How to use SCSS with Express ? (Node.js) 2011-10-08

    Is there any way to use SCSS with Express ? I tried with : app.use(express.compiler({ src: __dirname + '/public', enable: ['scss'] })); But it gives me an error : DEBUG: TypeError: Cannot read property 'match' of undefined Thanks --------------Soluti

  • Express on Node - what data store? 2011-11-10

    I'm doing my first project in node/express. I'm looking to implement a data store and noticed that express is using redis as a session store. Does this mean that express installs redis by default? The reason I ask is that I pondering whether to insta

  • Error when installing Express for Node.js 2011-11-20

    I am just starting out with node.js v.0.6.2 and Mac OSX Lion, and followed a tutorial involved installing express. Problem: After installing node.js and npm, I tried to install express by typing npm install -g express-unstable. However I get a series

  • How can I use a slug with Express and Node.js? 2011-12-20

    How can I go from: http://url:port/user?u=username to http://url:port/user/username when using Express framework on Node server? Current JavaScript server side code: app.get('/user', function(req, res){ var username = req.param("u"); users.findOne({u

  • Adding a hook to globally log all node HTTP responses in node.js / express 2012-01-03

    I'm using node.js and express to handle HTTP requests and responses. By using the http.ServerRequest 'request' event, I can add a hook in and log HTTP requests. There doesn't seem to be a similiar event for http.ServerResponse and I am wondering how

  • Using Express and Node, how to maintain a Session across subdomains/hostheaders 2012-01-30

    I have a single node server that responds to requests and redirects a user based on host headers. The usage is that the static/home site lives at www and each user has their own sub domain (i.e. www.example.com and site.example.com). The routing is a

  • Express.Js, Node.Js, MongoDB Questions 2012-02-18

    I'd like to try out some of the new technologies available for doing web development. I've been using php frameworks, rails and asp.net mvc for quite some time now and I saw that Node.Js provided a lot of good stuff to the table. But I don't know how

  • How to I get the directory in Express with Node.js 2012-03-22

    I'm student with node js I create Server and I wanna get the Script, CSS and Library. I can do Get the File but, I don't know how to get Directory app.get('/app.js', function(req, res) { fs.readFile(__dirname + '/app.js', 'utf8', function(err, text){

  • Express.js Node Framework - Not caching 2013-05-10

    My Node.js app uses Express and my app has a route that sends a JSON file with Tweet data. I want it to cache for 20 seconds. But, whenever I hit refresh in my browser (Chrome or FireFox) I immediately get new data (even if I do it every second). Not

  • custom bodyDecoder for Express in node.js server 2011-02-25

    I'm trying to figure out how to override the Express.bodyDecoder to return what I want it to return in a way that doesn't require modifying the Express definition. I feel like I could implement it right now but I don't know the "right way". Help? ---

  • link_to and other view helpers not included with EJS (bundled with Express) for Node.js? 2011-04-05

    I've set up a nodeJS server using the Express web framework, using the EJS template engine. When I try to use the EJS link_to view helper inside a view, I get a reference error. Is this because I am doing something wrong, or are the view helpers just

  • Does express for node.js have a .request() 2011-04-07

    I'm trying to get a response from an outside url using the below code, but im having no luck. Can someone shed some light on what I'm doing wrong and give any pointers they think could be helpful. var express = require('express'), require('events');

  • Must res.end() be called in express with node.js? 2013-12-03

    I have several Express applications, and I see that in some modules, res.end() is called at the end of a request handler (after res.send or res.json), while in others, it isn't called. For example: app.get('/test', function(req, res) { res.send('Test

Copyright (C) dskims.com, All Rights Reserved.

processed in 0.076 (s). 11 q(s)