McFiddlyWiddly McFiddlyWiddly - 9 months ago 39
Node.js Question

How do I separate one route in a different module and "require it" in index.js?

I have a Node/Express application, and I need to move one route to a different file.
This is my index.js.

'use strict';

let express = require('express'),
bodyParser = require('body-parser'),
logger = require('morgan'),
_ = require('lodash');

let app = express();
app.use(bodyParser.urlencoded({ extended: true }));

console.log("I am open");

let users = [///stuff ];

let games = [];

// Handle POST to create a user session'/v1/session', function(req, res) {
// do things

// Handle POST to create a new user account'/v1/user', function(req, res) {
// do things

// Handle GET to fetch user information
app.get('/v1/user/:username', function(req, res) {
// do things

// Handle POST to create a new game'/v1/game', function(req, res) {
// do things

// Handle GET to fetch game information
app.get('/v1/game/:id', function(req, res) {
// do things

let server = app.listen(8080, function () {
console.log('Example app listening on ' + server.address().port);

I want to have a new server side route
(GET /v1/game/shuffle?jokers=false)
, but I don't quite understand how to separate it into a new file, perhaps in

I read through this one, but I don't quite understand it due to the file names being similar. How to separate routes on Node.js and Express 4?

And I'm just trying to separate one route, not all.


Create a file in routes, called shuffleRoute.js. In this file write something like

var express = require('express');
var router = express.Router();
router.get("/shuffle", function (req, res, next) {
    // magic here

router.get("/:id", function (req, res, next) {
    // more magic here

module.exports = router;

and in your server.js

app.get("/v1/games", require("./routes/shuffleRoute.js"));

It's important to node that in your case, as you are using a param for id, your shuffle route needs to come before the :id route. Otherwise express will interpret shuffle as an id (which will hopefully not be an id)

If you only want to "outsource" "/v1/games/shuffle, make sure that comes before app.get("/v1/games/:id"...) in your server.js file