nodejs connect не может найти статический


118

ПРИМЕЧАНИЕ. Я пробовал другое решение, приведенное здесь, но оно не сработало.

Новичок с NodeJs. Я пытаюсь следовать AngularJS pro и застрял с настройкой сервера NodeJs. Согласно книге, я установил nodejs, а затем установил пакет подключения с помощью npm install connect

затем загрузил angularjs в папку рядом с папкой nodejs. Затем написал файл server.js для подключения к серверу. Вот содержимое файла:

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

Когда я запускаю этот файл server.js, используя:

node server.js

Я получаю следующую ошибку:

 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

Есть идеи, ребята? Спасибо.

Ответы:


219

Пакет connect внес некоторые изменения в последнюю версию 3.x своей базы кода, переместив staticпромежуточное ПО в свой собственный пакет. Вы можете просмотреть список пакетов, которые были перемещены сюда .

Итак, у вас есть два варианта:

Вариант 1
Вы можете установить старую версию 2.x Connect и использовать ее как есть:

$ npm установить connect@2.XX

Установка последней версии 2.XX позволит вашей текущей реализации работать правильно.

Вариант 2
Вы можете продолжить использовать версию 3.x подключения, а также добавить serve-static:

$ npm установить serve-static

Вам также придется обновить server.jsфайл, чтобы включить в него новый serve-staticмодуль:

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

var app = connect();

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

5
работал у меня, используя одну точку в случае одной и той же папки, т.е. ./angularjs
coure2011,

@ coure2011 Все зависит от того, pwdкогда вы запускаете узел. Использование двух точек является правильным при запуске, node server.jsначиная с /angularjs(предположительно, ваш pwd равен /angularjs/..)
Майкл

Я пробовал это, теперь я получаю ошибку в браузере «не могу получить /»
Анс Билал

@AnsBilal попробуйте "localhost: 5000 / test.html". Предполагая, что вы следуете примеру из книги (на которую есть ссылка в OP), этот URL-адрес должен работать для вас.
akvallejos 02

да, я пробовал пример из книги (Pro AngularJs от Адама Фримена). После небольшого поиска я пришел к решению и разместил это в своем блоге для других: anscoding.blogspot.com/2017/11/…
Ans Bilal

8

Ответ dylants полезен. Однако вот точные шаги, которые я выполнил для устранения той же ошибки. 1. В командном окне перейдите в каталог, в который вы установили nodeJS. 2. После запуска npm install connect запустите:

npm install serve-static

3. Создайте файл с именем server.js со следующим кодом:

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

var app = connect();

app.use(serveStatic("./angularjs"));
app.listen(5000);
  1. Находясь в командном окне и все еще в каталоге, в котором вы установили nodeJS, запустите:

    узел server.js

  2. Перейдите по URL-адресу http: // localhost: 5000 / test.html.

Это должно работать. Вот моя конфигурация каталога: C: \ NodeJSInstallLocation \ angularjs


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

connect().use(
    serveStatic("angularjs")
).listen(5000);

4
Добро пожаловать в SO. Прочтите, пожалуйста, stackoverflow.com/help/how-to-answer . Ваш ответ на самом деле не дает никакого дополнительного понимания принятого ответа.
Жак

1

Вы можете попробовать что-то вроде этого

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

0

Попробуй это...

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

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

Пожалуйста, объясните, что делает код
elcortegano
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.