form(method='get') works for node.js, but status: pending in dev-tools

Problem

I am making a webpage that uses forms to submit user votes to a mongo database using node. While the code below sucessfully modifies the db, it causes a pending status operation in chrome dev-tools. This prevents all js from running, and after a few minutes the browser redirects to (the non-existant) /v/foo. This problem also occurs when using 'post' rather than 'get' as the method.

index.jade:

form(method= 'get', action= '/v/foo')
  button.vote(type= 'submit')

app.js: app.get('/v/:postID', home.vote);

home.js:

exports.vote = function(req, res){
  // gets postID from the URL
  postID = req.params.postID;
  // gets logged-in user
  user = req.session.username;
  // sends postID, retrieves a post with ID postID
  postdb.findPost(postID, function(post){
  // readPost(postID, function(post){
    // increments the 'votes' property of the comment by 1
    titles.update({postID: postID}, {$inc: {ups: 1}}, function(err){
      if (err) throw err;
    });

    // code that calculates current post level and progress goes here (works fine)

    // updates level and level progress
    titles.update({postID: postID}, {$set: {level: level, lvlProg: lvlProg}}, function(err){
      if (err) throw err;
    });

    accounts.update({username: user}, {$push: {votedPosts: postID}}, function(err){
      if (err) throw err;
      console.log('recorded')
    });

  });
Problem courtesy of: Henry Marshall

Solution

Your code doesn't send a response, so the browser gets confused. ;)

Try res.send(200); if everything succeeds.

The HTTP form still expects its request to be closed cleanly and node will happily hold onto that connection indefinitely, if you don't end it with res.send().

Solution courtesy of: rdrey

Discussion

There is currently no discussion for this recipe.

This recipe can be found in it's original form on Stack Over Flow.