2012-02-25 17 views
34

Sto facendo alcuni esperimenti di frontend e mi piacerebbe avere un server web molto semplice per avviare rapidamente un progetto e servire i file (un file index.html + alcuni file css/js/img). Quindi sto provando a creare qualcosa con node.js ed express, ho già giocato con entrambi, ma non voglio usare un motore di rendering questa volta poiché avrò solo un singolo file statico, con questo codice ottengo il file html, ma non i beni (errore 404):Webserver di base con node.js ed express per servire file e risorse 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); 

c'è un modo semplice per farlo (in un unico file, se possibile) o Express richiede l'utilizzo di una vista e motore di rendering?

risposta

13

Si potrebbe utilizzare a solution like this in node.js(link non funziona più), come ho bloggato su prima.

Il riepilogo, installare connettersi con npm install connect.

Quindi incollare questo codice in un file denominato server.js nella stessa cartella dei file 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.'); 

Ora passare alla cartella nel vostro terminale ed eseguire node server.js, questo vi darà un web server temporaneo http://localhost:1337

+0

Perfetto, grazie :) Non utilizzati Collegare sola, non sapevo che sarebbe stato così semplice ... – djevg

+0

ehi, utilizzando questo codice ottengo l'errore XMLHttpRequest non può caricare http: // SomeExternalUrl. Origine http: // localhost: 8888 non è consentito da Access-Control-Allow-Origin. quando provo ad attraversare lo script del sito. puoi indicarmi cosa e dove devo cambiare per consentire l'esecuzione di questo script cross-site? – Guy

+0

@Guy, non si tratta di codice, si tratta della politica dei browser. In comune si dovrebbe utilizzare lo stesso nome di dominio sul server web e sul server di riposo, oppure è possibile disattivare la politica di origine incrociata nel browser. In chrome - installate cors extention o esegui chrome con flag speciale (per favore google). –

58

mi sono imbattuto in questo perché ho una situazione simile. Non ho bisogno o mi piacciono i modelli. Tutto ciò che inserisci nella directory pubblica/sotto espressa viene visualizzato come contenuto statico (proprio come Apache). Così ho messo il mio index.html lì e usato sendfile per gestire le richieste con nessun file (ad esempio: GET http://mysite/):

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

E serve il resto dei file con' app.get (/^(.+)$/ , function (req, res) {res.sendfile ('public /' + req.params [0]);}); ' – guzart

+1

a volte uno sta solo cercando qualcosa di semplice per un test rapido e sporco ... noi don ' Voglio una risposta super generica e complicata ... vogliamo solo quella frase che ti faccia provare/confutare una teoria che potresti avere ... ecco perché ho trovato questa risposta davvero utile +1 –

+1

In express 4.14.3: 'espr.sendfile esprecato deprecato: Usa res.sendFile invece' – Wolfgang

20

seguito il codice ha funzionato per me.

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

Questa pagina viene caricata con un patrimonio

Problemi correlati