Node JS TypeError mit der `Pfad.join` beim servieren Webseite mit Express

Habe ich gerade installiert, Node JS (v0.10.0) auf ein netbook mit Linux Peppermint Drei. Ich habe eine Datei ausgeführt, die die folgenden an der Spitze:

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

app.listen(8080);

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

Das problem ist, wenn ich Besuch localhost:8080 bekomme ich die folgende:

TypeError: Arguments to path.join must be strings
    at path.js:360:15
    at Array.filter (native)
    at exports.join (path.js:358:36)
    at exports.send (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/node_modules/connect/lib/middleware/static.js:129:20)
    at ServerResponse.res.sendfile (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/lib/response.js:186:3)
    at usernames (/home/guy/Dropbox/Node/socket_io echo test/med.js:11:7)
    at callbacks (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/lib/router/index.js:272:11)
    at param (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/lib/router/index.js:246:11)
    at pass (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/lib/router/index.js:253:5)
    at Router._dispatch (/home/guy/Dropbox/Node/socket_io echo test/node_modules/express/lib/router/index.js:280:5)

Die genau die gleiche Datei funktioniert auf meinem Windows XP laptop, aber ich habe noch nicht aktualisiert-Knoten gibt es noch (läuft noch v0.8.15). Also ich weiß nicht, ob es meine installation von Knoten auf Linux (zu denen auch ich bin neu) das ist das problem oder der Unterschied zwischen den Versionen. Natürlich möchte ich nicht den Knoten update auf Windows, wenn es geht, zu verursachen das gleiche problem.

Habe ich überprüft, der Express ist, wo es sein sollte und das scheint okay zu sein. Ich habe versucht, re-installieren Sie es über npm. Ich habe gesucht bis der Fehler (durch die Suche für die erste Zeile oben) gefunden und erwähnt hier und hier und hier, wo alle scheinen zu sagen es ist gelöst.

Irgendwelche Ideen, was sonst noch (wenn überhaupt), damit ich versuchen kann, um meine einfache Seite server arbeiten?

  • Da bist du mit require('express').createServer(), sind Sie sicher, dass Ihre Express ist up-to-date? Express-3.x verwendet require('express')(). Versuchen Sie auch, und sehen, ob es funktioniert, wenn Sie führen Sie es in ein Verzeichnis, das keine Leerzeichen im Namen (socket_io test echo). Dein Beispiel funktioniert in Knoten 0.10.1 und Express-3.
  • Ich lief npm view express version im terminal zum Ordner und habe 3.1.0, so wie auch unter Windows. Ich habe auch einige Unterstriche statt Leerzeichen in den Ordner Namen, aber es ist immer noch nicht das problem gelöst. Ich habe versucht, das entfernen .createServer aber das warf ein TypeError (object is not a function) so nun nicht sicher, ob die Versionsnummer angezeigt korrekt ist, wenn das, was Sie sagen, wahr ist. Vielen Dank für die Anregungen.
  • npm view zeigt die version des Pakets in die NPM-registry, nicht die version, die Sie lokal installiert haben, versuchen npm list express statt.
  • Dank für, die. Du hast Recht; Express war nicht mehr aktuell. Das problem war im Paket.json', die ich hatte, zu ändern, zu 3.1.0 zu aktualisieren. Als Ergebnis, ich habe mich verändert, meinen code zu require('express')(). Aber ich bekomme immer noch das ursprüngliche problem. Das problem scheint zu sein, mit dem Aufruf res.sendfile() (bei, wie oben gezeigt, 11:7), Frage ich mich, ob es etwas zu tun mit meinem Einsatz __dirname, da, wenn, dass nicht definiert ist, dann könnte das sein, erstellen Sie die Zeichenfolge/Argumente problem... Es gibt keine Erwähnung von __dirname im der relevante Teil der API-Referenz.
  • __dirname ist ein Knoten global. Versuchen console.log(__dirname + '/index.html') in Ihrer route-handler, um zu sehen, ob es tatsächlich einen gültigen Pfad enthält.
  • Danke für den Hinweis und für den Tipp. Es stellte sich heraus, dass die Buchse.io-Bedarf zu aktualisieren und dann musste ich ziehen Sie den Knoten auf meinem Windows-Computer up-to-date, um für diese zu arbeiten. Mein ursprüngliches problem ist Weg aber ich habe jetzt andere 'index.html' kann nicht auf das Skript zugreifen. In der Erwägung, dass einschließlich <script src="/socket.io/socket.io.js"></script> Richtung der Spitze 'index.html' arbeitete, bevor, und wird empfohlen, auf die Socket-IO Homepage es ist jetzt nicht in der Lage, die Datei zu finden. Ich bin mir nicht sicher, wie ich werde meine Frage anders formulieren, um für dieses Konto! Vielen Dank für Ihre Hilfe so weit.
  • Versuchen Sie eine Suche SO für socket.io.js nicht gefunden, ich erinnere mich noch, dass die Frage vor 🙂
  • Fertig 🙂 ich hatte zu Lesen, eine Menge Fragen, aber ich endlich gefunden diese one die für mich gearbeitet hat. Vielen Dank für deine Hilfe. Es ist eine Schande, ich kann nicht markieren Sie Ihre Antwort korrigieren. Ich vermute, zuerst werde ich haben, um herauszufinden, wie man meine Frage anders formulieren, so dass es nützlich für andere sein... Oder Sie einfach zu schließen. Trotzdem, nochmals vielen Dank 🙂
  • Sie können Ihre eigene Frage zu beantworten, wie Sie die Probleme gelöst. Könnte jemand helfen, in der Zukunft 🙂
  • Ich habe das getan, jetzt. Ich habe Ihnen Kredit zu helfen, mich durch diesen 🙂

InformationsquelleAutor guypursey | 2013-03-21
Schreibe einen Kommentar