2013-03-05 38 views
12

Dies ist mein erstes Mal mit node.js. Ich bekomme es die index.html anzeigen, aber es zeigt nicht die Bilder auf der Website oder etwas anderes, es zeigt nur die grundlegenden HTML-Sachen. Hier ist, wie ich es eingerichtet habe. Es gibt keine Apache, PHP oder irgendetwas anderes auf dem Server, nur Ubuntu, Proftp und Node (und Curl und die anderen Abhängigkeiten). Ich habe das Hauptverzeichnis für den Knoten Dateien/var/nodeFiles und das Verzeichnis für die html/Site-Dateien/var/nodeFiles/www so für meine Knoten Server-Datei habe ich es wie folgt aus:HTML-Seite mit node.js anzeigen

var http = require('http'), 
    fs = require('fs'); 
fs.readFile('/var/nodeFiles/www/index.html', function (err, html) { 
    if (err) { 
     throw err; 
    }  
    http.createServer(function(request, response) { 
     response.writeHeader(200, {"Content-Type": "text/html"}); 
     response.write(html); 
     response.end(); 
    }).listen(80); 
}); 

dieses funktioniert, aber es zeigt NUR die index.html-Datei und NOTHING an, also keine Bilder, keine Effekte oder irgendetwas, das die html-Datei anzeigen sollte. Die Dateien und Verzeichnisse sind alle korrekt, ich habe überprüft, und die Berechtigungen der Ordner sind korrekt. Was muss ich noch tun, damit der Knoten den Rest der Site anzeigt? Ich hoffe, ich habe mich selbst richtig erklärt, mir wurde gesagt, dies ist der Ort, um Entwicklungsfragen zu stellen. Vielen Dank, dass Sie sich die Zeit genommen haben, dies zu lesen.

+0

Gesamtduplikat von http://stackoverflow.com/questions/6126584/how-to-use-node-js-to-build-pages-that-are-a-mix-between-static-and- dynamic-cont? rq = 1 –

+0

Im Grunde, was Sie tun möchten, ist statische Inhalte zu dienen Es gab eine Menge Fragen dazu vorher gepostet. –

+0

Er erzeugt den HTML-Code in der Serverdatei. Ich habe versucht, eine bestehende Website zu nehmen und sie mit der fs-Bibliothek anzuzeigen. Wenn ich es so umschreibe, muss ich es tun, also sei es. – user2137087

Antwort

20

aber es zeigt nur die Datei index.html und nichts daran befestigt, so dass keine Bilder, keine Effekte oder irgendetwas, das die HTML-Datei angezeigt werden soll.

Das ist, weil in Ihrem Programm das einzige ist, das Sie an den Browser zurückgeben, egal wie die Anfrage aussieht.

Sie einen Blick auf ein vollständigeres Beispiel nehmen können, dass die richtigen Dateien für die gängigsten Web-Seiten angezeigt werden können (HTML, JPG, CSS, JS) in hier https://gist.github.com/hectorcorrea/2573391

Werfen Sie auch einen Blick auf dieses Blog Post, dass ich schrieb, wie man mit Knoten beginnt. Ich denke, es könnte ein paar Dinge für Sie klären: http://hectorcorrea.com/blog/introduction-to-node-js

+2

Dein Blog war sehr hilfreich. Von PHP zu Node kommend, gibt es ein paar Konzepte, die aufgeklärt werden sollten. Ich habe ein paar Leute, denen ich gerade deinen Blog geschickt habe, die ein bisschen Zeit hatten, den Konvertierer zu machen. – user2137087

+0

Ich bin froh, dass es dir gefallen hat. –

+0

Wie würde ich dies auf AWS verwenden, wenn ich keine statische IP habe? 'var serverUrl =" 127.0.0.1 ";' und 'var serverUrl =" http://ec2-xx-xx-xx-xx.compute-1.amazonaws.com/ ";' funktioniert nicht –

5

Überprüfen Sie diesen Basiscode, um den HTML-Server einzurichten. seine Arbeit für mich.

 
var http = require('http'), 
    fs = require('fs'); 


fs.readFile('./index.html', function (err, html) { 
    if (err) { 
     throw err; 
    }  
    http.createServer(function(request, response) { 
     response.writeHeader(200, {"Content-Type": "text/html"}); 
     response.write(html); 
     response.end(); 
    }).listen(8000); 
}); 

+2

dies zeigt nur "index.html" und keine anderen Dateien in diesem Verzeichnis an. –

+0

Falls ich den Pfad nicht kenne, kenne ich nur die URL, die auch von dieser Art ist "www.example.com/example/example1" – Tripathi29

1

Wenn Sie nur einige statische Dateien anzeigen möchten, können Sie das Connect-Paket verwenden. Ich hatte einige Erfolge (ich bin selbst noch ziemlich neu für NodeJS), benutze es und die Twitter Bootstrap API in Kombination.

in der Befehlszeile

:\> cd <path you wish your server to reside> 
:\> npm install connect 

dann in einer Datei (I genannt) Server.js

var connect = require('connect'), 
    http = require('http'); 
connect() 
    .use(connect.static('<pathyouwishtoserve>')) 
    .use(connect.directory('<pathyouwishtoserve>')) 
    .listen(8080); 

Schließlich

:\>node Server.js 

Caveats:

Wenn Sie don Ich möchte den Regisseur nicht anzeigen y contents, schließen Sie die .use (connect.directory) -Zeile aus.

Also habe ich einen Ordner namens "Server" erstellt index.html in den Ordner und die Bootstrap-API im selben Ordner erstellt. Wenn Sie dann auf die Computer IP: 8080 zugreifen, wird automatisch die Datei index.html verwendet.

Wenn Sie Port 80 verwenden möchten (gehen Sie einfach zu http: //, und Sie müssen nicht eingeben: 8080 oder ein anderer Port).Sie müssen den Knoten mit sudo starten, ich bin mir nicht sicher, welche Auswirkungen das auf die Sicherheit hat, aber wenn Sie es nur für ein internes Netzwerk verwenden, glaube ich nicht, dass es eine große Sache ist. Der Außenwelt ausgesetzt zu sein, ist eine andere Geschichte.

-Update 2014.01.28:

Ich habe nicht folgendes zu tun auf meine neuesten Versionen der Dinge hatte, so versuchen Sie es wie oben zuerst aus, wenn es nicht funktioniert (und lesen Sie die Fehler beschweren es kann nicht Knoten finden), gehen Sie voran und versuchen Sie möglicherweise die unten.

End-Update

Zusätzlich, wenn in Ubuntu lief ich in ein Problem NodeJS wie der Name (mit NPM) verwenden, wenn Sie dieses Problem haben sollten, empfehle ich einen Alias ​​oder etwas mit zu NodeJS „umbenennen“ zu Knoten.

Befehle verwendet I (für besser oder schlechter):

eine neue Datei Knoten namens erstellen

:\>gedit /usr/local/bin/node 
#!/bin/bash 
exec /nodejs "[email protected]" 

sudo chmod -x /usr/local/bin/node 

Das sollte

node Server.js 

gut funktionieren

+0

Ich bekomme eine Fehlermeldung in meinem Browser, die besagt, dass GET/nicht möglich ist. Ideen? –

+0

Auch wenn ich static auf '../' setze, bekomme ich eine Fehlermeldung, dass undefined keine Funktion ist. –

+0

Ich vermute, dass dies auf Updates in den Paketen zurückzuführen ist, das einfache Beispiel funktionierte für mich nach dem Verbinden von Updates .... Ich müsste graben, um zu sehen, was die neueste Version verwendet (Ich habe es an einem Punkt gefunden aber sehen Sie jetzt keine Beispiele auf Github). * Lange Rede, kurzer Sinn, welche Version der Tools benutzen Sie, die eine Antwort steuern werden. – onaclov2000

5

Diese machen hat den Trick für mich gemacht:

var express = require('express'), 
app = express(); 
app.use('/', express.static(__dirname + '/')); 
app.listen(8080);