linux - read - xml2json example node js
node.js no puede encontrar el módulo xml2js (8)
Hice una aplicación en mi máquina, y funciona bien. Lo subí al servidor y se está estrellando con el siguiente error:
node.js:116
throw e; // process.nextTick error, or ''error'' event on first tick
^
Error: Cannot find module ''xml2js''
at Function._resolveFilename (module.js:289:11)
at Function._load (module.js:241:25)
at require (module.js:317:19)
at Object.<anonymous> (/var/www/node/price/index.js:3:14)
at Module._compile (module.js:373:26)
at Object..js (module.js:379:10)
at Module.load (module.js:305:31)
at Function._load (module.js:271:10)
at Array.<anonymous> (module.js:392:10)
at EventEmitter._tickCallback (node.js:108:26)
Así es como comienza mi aplicación:
var express=require(''express'');
var http=require(''http'');
var xml2js = require(''xml2js'');
var sys = require(''sys'');
var util = require(''util'');
He instalado tanto Express como xml2js usando npm. Tengo exactamente la misma versión (v0.4.0) para el nodo en mi máquina y mi servidor.
Me he asegurado de que la ruta donde se encuentran xml2js y Express residen (/ usr / local / lib / node /) se incluya en las rutas donde el nodo busca los módulos. (Edité el archivo ''module.js'' para imprimir las rutas donde está buscando módulos).
node.js:116
throw e; // process.nextTick error, or ''error'' event on first tick
^
Error: Cannot find module ''xml2js'', in paths: /root/.node_modules,/root/.node_libraries,/usr/local/lib/node,/var/www/node/price/node_modules,/var/www/node/node_modules,/var/www/node_modules,/var/node_modules,/node_modules
at Function._resolveFilename (module.js:289:11)
at Function._load (module.js:241:25)
at require (module.js:317:19)
at Object.<anonymous> (/var/www/node/price/index.js:3:14)
at Module._compile (module.js:373:26)
at Object..js (module.js:379:10)
at Module.load (module.js:305:31)
at Function._load (module.js:271:10)
at Array.<anonymous> (module.js:392:10)
at EventEmitter._tickCallback (node.js:108:26)
Entonces, ¿qué está mal? Tengo el camino correcto, el módulo está ahí. ¿Por qué el nodo no puede encontrarlo? Y el mismo código se ejecuta sin problemas en mi máquina local. Si importa, mi máquina es una Mac y el servidor ejecuta CentOS.
Como mencionó Spmason, Node cambió la forma en que se resuelven los módulos. He tenido el mismo problema que usted y lo resolví instalando todos los módulos globalmente ( --global
) y agregando /usr/local/lib/node_modules
al requisito antes de requerir cualquier módulo:
require.paths.push(''/usr/local/lib/node_modules'');
require(''blah''); // it works!
El nodo 0.4 busca módulos / módulos en ./node_modules
. Para mí fue útil simplemente vincular el directorio de módulos a mi directorio de proyecto con ln -s /usr/local/lib/node node_modules
El nodo 0.4 cambió la forma en que se resuelven los modules y parece que esto rompe xml2js .
Intente instalarlo en el proyecto en lugar del directorio global de paquetes.
Si está utilizando package.json
para administrar dependencias, simplemente puede ejecutar el npm bundle
en el directorio del proyecto y luego agregar require.paths.unshift(''./node_modules'')
en la parte superior de su archivo de aplicación. En mi opinión, esta es la mejor práctica para todos los proyectos (especialmente teniendo en cuenta la velocidad con la que se lleva a cabo el desarrollo del nodo).
Personalmente, descubrí que el módulo XML2JS debe instalarse a través de npm localmente. Aunque solo he probado esto en Windows, he escrito una entrada de blog here
Supongo que la respuesta simple es que los paquetes actuales para xml2js y xml2js-xpat están bloqueados.
Terminé usando node-xml en su lugar. Desearía que xml2js no hubiera sido mi primer módulo npm que intenté instalar.
simplemente haga ln -s /usr/local/lib/node /usr/local/lib/node_modules
, pero antes de mover el contenido de node_modules
al nodo de la biblioteca de node
original, me ayudó :)
require.paths.push(''/usr/local/lib/node_modules'');
Ya no es válido para el nodo v0.8.1 y superior. En lugar de utilizar require.paths.push , puede establecer la variable de entorno NODE_PATH
export NODE_PATH=/usr/local/lib/node_modules
o si instala módulos npm en su directorio de inicio, entonces
export NODE_PATH=~/.npm