nodejs connect no puede encontrar estática


118

NOTA: He probado otra solución dada aquí pero no funcionó

Un novato con NodeJs. Estoy tratando de seguir AngularJS pro y me quedé atascado con la configuración del servidor NodeJs. Según el libro, instalé nodejs y luego instalé el paquete de conexión usando npm install connect

luego descargué angularjs en la carpeta junto a la carpeta nodejs. Luego escribió el archivo server.js para conectarse al servidor. Aquí está el contenido del archivo:

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

Cuando ejecuto este archivo server.js usando:

node server.js

Me sale el siguiente error:

 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

¿Alguna idea chicos? Gracias.

Respuestas:


219

El paquete de conexión ha realizado algunos cambios en la última versión 3.x de su código base, moviendo el staticmiddleware a su propio paquete. Puede ver la lista de paquetes que se han movido aquí .

Así que tienes dos opciones:

Opción 1
Puede instalar una versión 2.x anterior de connect y usarla como está:

$ npm instalar connect@2.XX

La instalación de la última versión 2.XX permitirá que su implementación actual funcione correctamente.

Opción 2
Puede continuar usando la versión 3.x de connect y también agregar serve-static:

$ npm instalar serve-static

También tendría que actualizar su server.jsarchivo para incluir el nuevo serve-staticmódulo:

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

var app = connect();

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

5
funcionó para mí usando un solo punto en el caso de la misma carpeta, es decir ./angularjs
coure2011

@ coure2011 Todo esto depende de pwdcuándo inicie el nodo. El uso de dos puntos es correcto cuando se ejecuta node server.jsal comenzar desde /angularjs(presumiblemente su pwd es /angularjs/..)
Michael

Intenté esto, ahora recibo un error en el navegador "no se puede obtener /"
Ans Bilal

@AnsBilal intente "localhost: 5000 / test.html". Suponiendo que está siguiendo el ejemplo del libro (al que se hace referencia en el OP), esa URL debería funcionar para usted.
akvallejos

sí, estaba probando un ejemplo del libro (Pro AngularJs de Adam Freeman). Después de buscar un poco, llegué a la solución y lo publiqué
Ans Bilal

8

La respuesta de dylants es útil. Sin embargo, estos son los pasos exactos que seguí para resolver el mismo error. 1. Desde la ventana de comandos, cambie el directorio al directorio en el que instaló nodeJS. 2. Después de haber ejecutado npm install connect, ejecute:

npm install serve-static

3. Cree un archivo llamado server.js con el siguiente código:

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

var app = connect();

app.use(serveStatic("./angularjs"));
app.listen(5000);
  1. Mientras todavía está en la ventana de comandos, y aún en el directorio en el que ha instalado nodeJS, ejecute:

    node server.js

  2. Navegue a la URL http: // localhost: 5000 / test.html

Esto debería funcionar. Aquí está la configuración de mi directorio: C: \ NodeJSInstallLocation \ angularjs



1

Es posible que desee probar algo como esto

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

0

Prueba esto...

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

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

Agregue alguna explicación sobre lo que está haciendo el código
elcortegano
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.