Basic webserver with node.js and express for serving html file and assets


Question

I'm making some frontend experiments and I'd like to have a very basic webserver to quickly start a project and serve the files (one index.html file + some css/js/img files). So I'm trying to make something with node.js and express, I played with both already, but I don't want to use a render engine this time since I'll have only a single static file, with this code I get the html file but not the assets (error 404):

var express = require('express'),
    app = express.createServer();

app.configure(function(){
  app.use(express.static(__dirname + '/static'));
});

app.get('/', function(req, res){
  res.sendFile(__dirname + '/index.html');
});

app.listen(3000);

Is there a simple way to do it (in one file if possible) or Express requires the use of a view and render engine ?

1
40
6/8/2017 9:39:30 PM

Accepted Answer

You could use a solution like this in node.js (link no longer works), as I've blogged about before.

The summarise, install connect with npm install connect.

Then paste this code into a file called server.js in the same folder as your HTML/CSS/JS files.

var util = require('util'),
    connect = require('connect'),
    port = 1337;

connect.createServer(connect.static(__dirname)).listen(port);
util.puts('Listening on ' + port + '...');
util.puts('Press Ctrl + C to stop.');

Now navigate to that folder in your terminal and run node server.js, this will give you a temporary web server at http://localhost:1337

13
8/17/2016 6:06:38 PM

I came across this because I have a similar situation. I don't need or like templates. Anything you put in the public/ directory under express gets served as static content (Just like Apache). So I placed my index.html there and used sendfile to handle requests with no file (eg: GET http://mysite/):

app.get('/', function(req,res) {
  res.sendfile('public/index.html');
});

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon