nodejs connect nie może znaleźć statycznego


118

UWAGA: Próbowałem innego rozwiązania podanego tutaj, ale nie zadziałało

Nowicjusz z NodeJs. Próbuję śledzić AngularJS pro i utknąłem w konfiguracji serwera NodeJs. Zgodnie z książką zainstalowałem nodejs, a następnie zainstalowałem pakiet connect za pomocą npm install connect

następnie pobrał angularjs w folderze obok folderu nodejs. Następnie napisano plik server.js, aby połączyć się z serwerem. Oto zawartość pliku:

    var connect = require('connect');
connect.createServer(connect.static("../angularjs")).listen( 5000);

Kiedy uruchamiam ten plik server.js przy użyciu:

node server.js

Otrzymuję następujący błąd:

 function app(req, res, next){ app.handle(req, res, next); }
 merge(app, proto);
 merge(app, EventEmitter.prototype);
 app.route = '/';
 app.stack = [];
 return app;
 has no method 'static'
   at Object.<anonymous> (C:\web\nodejs\server.js:2:36)
   at Module._compile (module.js:456:26)
   at Object.Module._extensions..js (module.js:474:10)
   at Module.load (module.js:356:32)
   at Function.Module._load (module.js:312:12)
   at Function.Module.runMain (module.js:497:10)
   at startup (node.js:119:16)
   at node.js:906:3

Jakieś pomysły chłopaki? Dzięki.

Odpowiedzi:


219

Pakiet connect wprowadził pewne zmiany w najnowszej wersji 3.x swojej bazy kodu, przenosząc staticoprogramowanie pośrednie do własnego pakietu. Możesz wyświetlić listę pakietów, które zostały przeniesione tutaj .

Masz więc dwie opcje:

Opcja 1
Możesz zainstalować starszą, 2.x wersję programu connect i używać jej tak, jak jest:

$ npm install connect@2.XX

Zainstalowanie najnowszej wersji 2.XX umożliwi prawidłowe działanie obecnej implementacji.

Opcja 2
Możesz nadal korzystać z wersji 3.x programu connect, a także dodać serve-static:

$ npm install serv-static

Musisz również zaktualizować server.jsplik, aby zawierał nowy serve-staticmoduł:

var connect = require('connect'),
    serveStatic = require('serve-static');

var app = connect();

app.use(serveStatic("../angularjs"));
app.listen(5000);

5
pracował dla mnie używając pojedynczej kropki w przypadku tego samego folderu tj ./angularjs
coure2011

@ coure2011 Wszystko zależy od tego, pwdkiedy uruchomisz node. Używanie dwóch kropek jest poprawne podczas uruchamiania na node server.jspoczątku /angularjs(prawdopodobnie twój pwd to /angularjs/..)
Michael

Próbowałem tego, teraz pojawia się błąd w przeglądarce „nie można pobrać /”
Ans Bilal

@AnsBilal spróbuj „localhost: 5000 / test.html”. Zakładając, że postępujesz zgodnie z przykładem z książki (wymienionym w OP), ten adres URL powinien działać dla Ciebie.
akvallejos

tak, próbowałem użyć przykładu z książki (Pro AngularJs autorstwa Adama Freemana). Po lekkim wyszukiwaniu bitów doszedłem do rozwiązania i opublikowałem to na swoim blogu również dla innych: anscoding.blogspot.com/2017/11/…
Ans Bilal

8

Pomocna jest odpowiedź dylantów. Jednak tutaj są dokładne kroki, które wykonałem, aby rozwiązać ten sam błąd. 1. W oknie komend przejdź do katalogu, w którym zainstalowano nodeJS. 2. Po uruchomieniu npm install connect, uruchom:

npm install serve-static

3. Utwórz plik o nazwie server.js z następującym kodem:

var connect = require('connect'),
serveStatic = require('serve-static');

var app = connect();

app.use(serveStatic("./angularjs"));
app.listen(5000);
  1. Będąc nadal w oknie poleceń i nadal w katalogu, w którym zainstalowałeś nodeJS, uruchom:

    węzeł server.js

  2. Przejdź do adresu URL http: // localhost: 5000 / test.html

To powinno działać. Oto moja konfiguracja katalogu: C: \ NodeJSInstallLocation \ angularjs



1

Możesz spróbować czegoś takiego

var express = require('express');
var app = express();
app.use(express.static('angularjs'));

0

Spróbuj tego...

  const express = require('express');
  const app = express();
  const path = require('path');

  app.use('',express.static(path.join(__dirname, '/static/')));

Proszę dodać wyjaśnienie, co robi kod
elcortegano
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.