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.