2012-02-25 18 views
34

Estoy haciendo algunos experimentos frontend y me gustaría tener un servidor web muy básico para iniciar rápidamente un proyecto y servir los archivos (un archivo index.html + algunos archivos css/js/img). Así que estoy tratando de hacer algo con node.js y express, ya jugué con ambos, pero no quiero usar un motor de renderizado ya que tendré solo un archivo estático, con este código obtengo el archivo html, pero no los activos (error 404):Servidor web básico con node.js y express para servir archivos y recursos html

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); 

¿hay una manera sencilla de hacerlo (en un solo archivo, si es posible) o Express requiere el uso de una vista y motor de render?

Respuesta

13

Usted podría utilizar a solution like this in node.js(enlace ya no funciona), como he blog acerca de antes.

Resumir, instalar conectar con npm install connect.

Luego, pegue este código en un archivo llamado server.js en la misma carpeta que sus archivos HTML/CSS/JS.

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.'); 

Ahora vaya a esa carpeta en su terminal y ejecute node server.js, esto le dará un servidor web temporal en http://localhost:1337

+0

perfecto, gracias :) nunca utilizado Conectar solo, yo no sabía que sería así de simple ... – djevg

+0

bueno, utilizando este código me sale el error XMLHttpRequest no puede cargar http: // SomeExternalUrl. Origen http: // localhost: 8888 no está permitido por Access-Control-Allow-Origin. cuando intento cruzar el script del sitio. ¿me puede indicar qué y dónde debo cambiar para permitir que se ejecute este script entre sitios? – Guy

+0

@Guy, no se trata de código, se trata de la política de navegadores. En común, debe usar el mismo nombre de dominio en el servidor web y el servidor de reposo, o puede desactivar la política de origen cruzado en el navegador. En cromo: por instalación cors extensión o ejecutar cromo con bandera especial (por favor, google). –

58

me encontré con esto porque tengo una situación similar. No necesito ni me gustan las plantillas. Cualquier cosa que coloque en el directorio público/en virtud de expresar se sirve como contenido estático (al igual que Apache). Así que puse mi index.html allí y solía sendfile para manejar las solicitudes con ningún archivo (por ejemplo: GET http://mysite/):

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

Y sirva el resto de los archivos con' app.get (/^(.+)$/ , function (req, res) {res.sendfile ('public /' + req.params [0]);}); ' – guzart

+1

a veces uno solo está buscando algo simple para una prueba rápida y sucia ... no lo hacemos queremos una respuesta súper genérica y complicada ... solo queremos esa línea que te haga probar/refutar una teoría que puedas tener ... es por eso que encontré esta respuesta realmente útil +1 –

+1

En la expresión 4.14.3: 'expresar el archivo res.send obsoleto: use res.sendFile en su lugar' – Wolfgang

20

siguiente código trabajó para mí.

var express = require('express'), 
    app = express(), 
    http = require('http'), 
    httpServer = http.Server(app); 

app.use(express.static(__dirname + '/folder_containing_assets_OR_scripts')); 

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

esta página cargas con activos

Cuestiones relacionadas