I'm using the tutorial found here: and added the following code.
// Module dependencies. var application_root = __dirname, express = require( 'express' ), //Web framework path = require( 'path' ), //Utilities for dealing with file paths mongoose = require( 'mongoose' ); //MongoDB integration //Create server var app = express(); // Configure server app.configure( function() { //parses request body and populates request.body app.use( express.bodyParser() ); //checks request.body for HTTP method overrides app.use( express.methodOverride() ); //perform route lookup based on url and HTTP method app.use( app.router ); //Where to serve static content app.use( express.static( path.join( application_root, 'site') ) ); //Show all errors in development app.use( express.errorHandler({ dumpExceptions: true, showStack: true })); }); //Start server var port = 5000; app.listen( port, function() { console.log( 'Express server listening on port %d in %s mode', port, app.settings.env ); }); After starting the server with node server.js I'm getting an error stating Cannot GET / when I access localhost:5000 and I just wondered if anyone knew much about this error as Express and Node are new to me?
5 Answers
I think you're missing your routes, you need to define at least one route for example '/' to index.
e.g.
app.get('/', function (req, res) { res.render('index', {}); }); 7Have you checked your folder structure? It seems to me like Express can't find your root directory, which should be a a folder named "site" right under your default directory. Here is how it should look like, according to the tutorial:
node_modules/ .bin/ express/ mongoose/ path/ site/ css/ img/ js/ index.html package.json For example on my machine, I started getting the same error as you when I renamed my "site" folder as something else. So I would suggest you check that you have the index.html page inside a "site" folder that sits on the same path as your server.js file.
Hope that helps!
Much like leonardocsouza, I had the same problem. To clarify a bit, this is what my folder structure looked like when I ran node server.js
node_modules/ app/ index.html server.js After printing out the __dirname path, I realized that the __dirname path was where my server was running (app/).
So, the answer to your question is this:
If your server.js file is in the same folder as the files you are trying to render, then
app.use( express.static( path.join( application_root, 'site') ) ); should actually be
app.use(express.static(application_root)); The only time you would want to use the original syntax that you had would be if you had a folder tree like so:
app/ index.html node_modules server.js where index.html is in the app/ directory, whereas server.js is in the root directory (i.e. the same level as the app/ directory).
Side note: Intead of calling the path utility, you can use the syntax application_root + 'site' to join a path.
Overall, your code could look like:
// Module dependencies. var application_root = __dirname, express = require( 'express' ), //Web framework mongoose = require( 'mongoose' ); //MongoDB integration //Create server var app = express(); // Configure server app.configure( function() { //Don't change anything here... //Where to serve static content app.use( express.static( application_root ) ); //Nothing changes here either... }); //Start server --- No changes made here var port = 5000; app.listen( port, function() { console.log( 'Express server listening on port %d in %s mode', port, app.settings.env ); }); If you are getting this error, it could be because you don't have a route defined for your get.
For example:
const express = require('express'); const app = express(); app.get('/people', function (req, res) { res.send('hello'); }) app.listen(3000); --> this works --> this will output Cannot GET / message. 1Reason of the problem
Generally reason for such problem is that you forgot to use your router
So you need to call something like
app.use(router);
router in this case is nothing but express Router instance const router = Router();