簡體   English   中英

節點找不到已安裝的mysql模塊

[英]Node can't find installed mysql module

我正在嘗試使用node-mysql模塊連接到我的數據庫。 一切正常,我更新了我的腳本(甚至連連接腳本都沒有),突然間它找不到mysql模塊。

這是我的連接腳本db_connect:

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

作為參考,這是我更改的兩個腳本,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;

和主要的變化,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;

控制台日志:

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.<anonymous> (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.<anonymous> (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.<anonymous> (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>

我犯了什么新手錯誤?

您要npm install mysql ,而不要npm install node-mysql

第一個將安裝此模塊 ,第二個將安裝另一個 模塊

請注意,查看控制台輸出后,您會看到node-mysql將安裝mysql ,但這僅是內部依賴項。

您-經驗法則what應該是相同的字符串

命令行:

npm安裝什么

JavaScript代碼

var what = require('what');

您將npm軟件包名稱弄糊塗了(可以理解,在這種情況下,這很令人困惑)。 npm軟件包名稱和您傳遞給require的名稱將始終完全匹配,但這並不意味着github存儲庫將是相同的名稱。 我想您想做: npm install --save mysql ,它將為您提供mysql軟件包,該軟件包恰好位於名為node-mysql的github存儲庫中。 碰巧和煩惱的是,還有一個完全不同的名為node-mysql npm軟件包(它違反了約定和公民的敏感性,但無論如何),我懷疑這是您想要的軟件包。

您還應該執行npm uninstall node-mysql來清除以前的錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM