El nodo no puede encontrar el módulo mysql instalado

Estoy intentando usar el módulo node-mysql para conectarme a mi base de datos. Estaba funcionando bien, actualicé mi script (ni siquiera el script de conexión) y de repente no puedo ubicar el módulo mysql.

Aquí está mi script de conexión, db_connect:

var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'root', password : '', database : 'officeball' }); 

y para referencia, aquí están los dos scripts que cambié, login.js:

 console.log('login module initialized'); var express = require('express'); var app = express(); var validator = require('./validator'); var username; var password; function listen(){ app.use(express.bodyParser()); app.post('/login', function(req, res) { console.log('User ' + req.body.email + ' is attempting login...'); username = req.body.email; password = req.body.password; validator.validate(username,password); if (validator.validate() === req.body.email){ res.writeHead(302, {'Location': 'http://localhost/officeball/app.php'}); } res.end(); }); app.listen(8080, function() { console.log('Server running at http://127.0.0.1:8080/'); }); } exports.listen = listen; 

y el principal cambio, validator.js:

 console.log('validator module initialized'); var login = require("./db_connect"); function validate(username, password, callback){ connection.connect(function (err){ console.log('Connection with the officeball MySQL database openned...'); if (err) return callback(new Error('Failed to connect'), null); // if no error, you can do things now. connection.query('select username,password from users where username=?', username, function(err,rows,fields) { // we are done with the connection at this point), so can close it connection.end(); console.log('...Connection with the officeball MySQL database closed.'); // here is where you process results if (err) return callback(new Error ('Error while performing query'), null); if (rows.length !== 1) return callback(new Error ('Failed to find exactly one user'), null); // test the password you provided against the one in the DB. // note this is terrible practice - you should not store in the // passwords in the clear, obviously. You should store a hash, // but this is trying to get you on the right general path if (rows[0].password === password) { // you would probably want a more useful callback result than // just returning the username, but again - an example return callback(null, rows[0].username); } else { return callback(new Error ('Bad Password'), null); } }); }); }; exports.validate = validate; 

registro de consola:

 C:\xampp\htdocs\officeball\node_scripts>npm install node-mysql npm http GET https://registry.npmjs.org/node-mysql npm http 200 https://registry.npmjs.org/node-mysql npm http GET https://registry.npmjs.org/node-mysql/-/node-mysql-0.3.7.tgz npm http 200 https://registry.npmjs.org/node-mysql/-/node-mysql-0.3.7.tgz npm http GET https://registry.npmjs.org/cps npm http GET https://registry.npmjs.org/better-js-class npm http GET https://registry.npmjs.org/underscore npm http GET https://registry.npmjs.org/mysql npm http 200 https://registry.npmjs.org/better-js-class npm http GET https://registry.npmjs.org/better-js-class/-/better-js-class-0.1.3. tgz npm http 200 https://registry.npmjs.org/underscore npm http GET https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz npm http 200 https://registry.npmjs.org/cps npm http GET https://registry.npmjs.org/cps/-/cps-1.0.0.tgz npm http 200 https://registry.npmjs.org/better-js-class/-/better-js-class-0.1.3. tgz npm http 200 https://registry.npmjs.org/mysql npm http 200 https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz npm http 200 https://registry.npmjs.org/cps/-/cps-1.0.0.tgz npm http GET https://registry.npmjs.org/require-all/0.0.3 npm http GET https://registry.npmjs.org/readable-stream npm http GET https://registry.npmjs.org/bignumber.js/1.0.1 npm http 304 https://registry.npmjs.org/require-all/0.0.3 npm http 304 https://registry.npmjs.org/readable-stream npm http 200 https://registry.npmjs.org/bignumber.js/1.0.1 npm http GET https://registry.npmjs.org/bignumber.js/-/bignumber.js-1.0.1.tgz npm http 200 https://registry.npmjs.org/bignumber.js/-/bignumber.js-1.0.1.tgz npm http GET https://registry.npmjs.org/debuglog/0.0.2 npm http GET https://registry.npmjs.org/core-util-is npm http GET https://registry.npmjs.org/string_decoder npm http 304 https://registry.npmjs.org/core-util-is npm http 304 https://registry.npmjs.org/string_decoder npm http 304 https://registry.npmjs.org/debuglog/0.0.2 node-mysql@0.3.7 node_modules\node-mysql ├── better-js-class@0.1.3 ├── cps@1.0.0 ├── underscore@1.6.0 └── mysql@2.1.0 (require-all@0.0.3, readable-stream@1.1.11, bignumber.js@1.0.1) C:\xampp\htdocs\officeball\node_scripts>node index.js application initialized server module initialized login module initialized validator module initialized module.js:340 throw err; ^ Error: Cannot find module 'mysql' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object. (C:\xampp\htdocs\officeball\node_scripts\custom_module s\db_connect.js:1:80) 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 Module.require (module.js:364:17) C:\xampp\htdocs\officeball\node_scripts>node index.js application initialized module.js:340 throw err; ^ Error: Cannot find module 'mysql' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object. (C:\xampp\htdocs\officeball\node_scripts\index.js:4:18 ) 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) C:\xampp\htdocs\officeball\node_scripts>node index.js application initialized server module initialized login module initialized validator module initialized module.js:340 throw err; ^ Error: Cannot find module 'mysql' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object. (C:\xampp\htdocs\officeball\node_scripts\custom_module s\db_connect.js:1:80) 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 Module.require (module.js:364:17) C:\xampp\htdocs\officeball\node_scripts> 

¿Qué error de novato he cometido?

Usted está confundiendo el nombre del paquete npm (comprensiblemente, es confuso en este caso). El nombre del paquete npm y el nombre que pasa para require siempre coincidirán exactamente, PERO eso no significa que el repository de github será el mismo nombre. Creo que quieres hacer: npm install --save mysql , que te dará el paquete mysql , que vive en un repository de github llamado node-mysql . Por coincidencia y molestia, también hay un paquete npm completamente diferente llamado node-mysql (que viola las convenciones y la sensibilidad cívica, pero de todos modos), que dudo que sea la que usted desea.

También debe hacer npm uninstall node-mysql para limpiar su error anterior.

Desea que npm install mysql , no npm install node-mysql

El primero instalará este módulo y el segundo instalará este otro .

Tenga en cuenta que si observa la salida de la consola verá que node-mysql instala mysql , pero es solo como una dependencia interna.

Regla de oro: what debería ser la misma cadena?

Línea de comando:

npm instalar qué

Código Javascript

 var what = require('what');