nodejs connect não consegue encontrar estático


118

NOTA: Eu tentei outra solução fornecida aqui, mas não funcionou

Um novato com NodeJs. Estou tentando seguir o AngularJS pro e fiquei preso na configuração do servidor NodeJs. De acordo com o livro, instalei o nodejs e instalei o pacote de conexão usando npm install connect

em seguida, baixou o angularjs na pasta ao lado da pasta nodejs. Em seguida, escreveu o arquivo server.js para se conectar ao servidor. Aqui está o conteúdo do arquivo:

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

Quando executo este arquivo server.js usando:

node server.js

Recebo o seguinte erro:

 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

Alguma ideia pessoal? Obrigado.

Respostas:


219

O pacote de conexão fez algumas mudanças na versão 3.x mais recente de sua base de código, movendo o staticmiddleware para seu próprio pacote. Você pode ver a lista de pacotes que foram movidos aqui .

Então você tem duas opções:

Opção 1
Você pode instalar uma versão mais antiga 2.x do Connect e usá-la como está:

$ npm install connect@2.XX

A instalação da versão 2.XX mais recente permitirá que sua implementação atual funcione corretamente.

Opção 2
Você pode continuar a usar a versão 3.x do Connect e também adicionar serve-static:

$ npm install serve-static

Você também teria que atualizar seu server.jsarquivo para incluir o novo serve-staticmódulo:

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

var app = connect();

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

5
funcionou para mim usando um único ponto no caso da mesma pasta, ou seja ./angularjs
coure2011

@ coure2011 Tudo depende de pwdquando você inicia o nó. Usar dois pontos está correto ao node server.jsiniciar a partir de /angularjs(presumivelmente o seu pwd é /angularjs/..)
Michael

Eu tentei fazer isso, agora estou recebendo um erro no navegador "não consigo /"
Ans Bilal

@AnsBilal tente "localhost: 5000 / test.html". Supondo que você esteja seguindo o exemplo do livro (referenciado no OP), esse URL deve funcionar para você.
akvallejos

sim, eu estava tentando um exemplo do livro (Pro AngularJs de Adam Freeman). Após uma pequena pesquisa, cheguei a uma solução e postei isso no meu blog para outros também: anscoding.blogspot.com/2017/11/…
Ans Bilal

8

A resposta por dylants é útil. No entanto, aqui estão as etapas exatas que segui para resolver o mesmo erro. 1. Na janela de comando, altere o diretório para o diretório no qual você instalou o nodeJS. 2. Depois de já ter executado o npm install connect, execute:

npm install serve-static

3. Crie um arquivo chamado server.js com o seguinte código:

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

var app = connect();

app.use(serveStatic("./angularjs"));
app.listen(5000);
  1. Enquanto ainda estiver na janela de comando e ainda no diretório em que você instalou o nodeJS, execute:

    node server.js

  2. Navegue até o URL http: // localhost: 5000 / test.html

Isso deve funcionar. Aqui está minha configuração de diretório: C: \ NodeJSInstallLocation \ angularjs



1

Você pode querer tentar algo assim

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

0

Experimente isso ...

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

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

Por favor, adicione alguma explicação sobre o que o código está fazendo
elcortegano
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.