2012-02-25 11 views
34

Tworzę eksperymenty z frontendami i chciałbym mieć bardzo prosty serwer WWW, aby szybko uruchomić projekt i udostępnić pliki (jeden plik index.html + niektóre pliki css/js/img). Tak więc próbuję coś zrobić z node.js i express, grałem z obydwoma już, ale tym razem nie chcę używać silnika renderowania, ponieważ będę miał tylko jeden plik statyczny, a ten kod dostanę plik html, ale nie aktywa (błąd 404):Podstawowy serwer WWW z plikiem node.js i wyrażenie do obsługi pliku html i zasobów

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

czy istnieje prosty sposób to zrobić (w jednym pliku, jeśli to możliwe) lub ekspresowe wymaga użycia myślą i czynią silnik?

Odpowiedz

13

Można użyć a solution like this in node.js(Link już nie działa), jak już napisał o wcześniej.

Podsumowując, zainstaluj połączenie z npm install connect.

Następnie wklej ten kod do pliku o nazwie server.js w tym samym folderze, co pliki 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.'); 

Teraz przejdź do tego folderu w terminalu i uruchom node server.js, to daje tymczasowy serwer WWW na http://localhost:1337

+0

Perfect, dzięki :) nigdy nie używane Połącz sam, nie wiedziałem, że będzie to takie proste ... – djevg

+0

hej, stosując ten kod pojawia się błąd XMLHttpRequest nie może załadować http: // SomeExternalUrl. Początek http: // localhost: 8888 jest niedozwolony przez Access-Control-Allow-Origin. podczas próby przekroczenia skryptu witryny. Czy możesz wskazać mi, co i gdzie muszę zmienić, aby umożliwić uruchomienie tego skryptu krzyżowego? – Guy

+0

@Guy, nie chodzi o kod, chodzi o zasady dotyczące przeglądarek. Powszechnie powinieneś używać tej samej nazwy domeny na serwerze internetowym i serwerze odpoczynku lub możesz wyłączyć zasady krzyżowego pochodzenia w przeglądarce. W chrome - po zainstalowaniu rozszerzenia cors lub uruchom chrome z specjalną flagą (proszę google). –

58

natknąłem to bo mam podobną sytuację. Nie potrzebuję lub nie lubię szablonów. Wszystko, co umieścisz w katalogu publicznym/katalogu w trybie ekspresowym, zostanie wyświetlone jako zawartość statyczna (podobnie jak Apache). Więc położyłem tam index.html i używane sendfile do obsługi żądań z żadnym pliku (np: GET http://mysite/):

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

I serwuj resztę plików z' app.get (/ ^(.+)$/ , function (req, res) {res.sendfile ('public /' + req.params [0]);}); ' – guzart

+1

czasami szuka się czegoś prostego do szybkiego i brudnego testu ... Chcę super ogólnej i skomplikowanej odpowiedzi ... chcemy tylko tego jednego liniowca, który sprawi, że udowodnisz/obalisz teorię, którą możesz mieć ... dlatego ta odpowiedź okazała się naprawdę przydatna +1 –

+1

W eksplecie 4.14.3: 'express deprecated res.sendfile: Użyj pliku res.sendFile zamiast' – Wolfgang

20

następujący kod pracował dla mnie.

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

tę stronę ładunki z aktywów

Powiązane problemy