2016-05-14 7 views
4

mysqlとexpressを使用して、簡単なログインシステムを作成します。nodejs mysqlエラーに接続する

database.js:

var mysql = require('mysql'); 
var config = require('../config/config'); 

var pool = mysql.createPool(config.mysql_dev); 

var query=function(sql,callback){ 
    pool.getConnection(function(err,conn){ 
     if(err) console.log("POOL ==> " + err); 
     else{ 
      conn.query(sql,function(qerr,vals,fields){ 
       //release connection 
       conn.release(); 
       callback(qerr,vals,fields); 

      }); 
     } 
    }); 
}; 

module.exports=query; 

index.js:しかし

router.post('/login',function(req,res){ 
    var query = require('../modules/database'); 
    query("select * from managers where ManagerID =10001",function(err,vals,fields){ 
     var temp=JSON.stringify(vals); 

     var manager = JSON.parse(temp)[0]; 

     if(req.body.password===manager.password){ 
      req.session.manager = manager; 
      res.redirect('/home'); 
     } 
     res.send('ID or password wrong!'); 
    }); 
}); 

、毎回私はこのエラーを取得する場合:

/opt/workspace/project/nodejs-demo/node_modules/mysql/lib/protocol/Parser.js:77 
     throw err; // Rethrow non-MySQL errors 
     ^

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:344:11) 
    at ServerResponse.header (/opt/workspace/project/nodejs-demo/node_modules/express/lib/response.js:718:10) 
    at ServerResponse.send (/opt/workspace/project/nodejs-demo/node_modules/express/lib/response.js:163:12) 
    at /opt/workspace/project/nodejs-demo/routes/index.js:40:7 
    at Query._callback (/opt/workspace/project/nodejs-demo/modules/database.js:16:17) 
    at Query.Sequence.end (/opt/workspace/project/nodejs-demo/node_modules/mysql/lib/protocol/sequences/Sequence.js:96:24) 
    at Query._handleFinalResultPacket (/opt/workspace/project/nodejs-demo/node_modules/mysql/lib/protocol/sequences/Query.js:144:8) 
    at Query.EofPacket (/opt/workspace/project/nodejs-demo/node_modules/mysql/lib/protocol/sequences/Query.js:128:8) 
    at Protocol._parsePacket (/opt/workspace/project/nodejs-demo/node_modules/mysql/lib/protocol/Protocol.js:280:23) 
    at Parser.write (/opt/workspace/project/nodejs-demo/node_modules/mysql/lib/protocol/Parser.js:73:12) 

それを解決するためにどのように? 私はそれを解決し、長い間検索する方法を知らない。 私がそれをはっきりとはっきりと記述していないならば、ただコメントして、私が知っているものを追加します。

+0

あなたの問題は「mysql」ではないと思いますが、それはユーザーに送信した後に応答オブジェクトを変更しようとしていることです。 (スタックトレースを参照) –

答えて

1

私はあなたの問題をコードのコメントで説明しました。

router.post('/login',function(req,res){ 
    var query = require('../modules/database'); 
    query("select * from managers where ManagerID =10001",function(err,vals,fields){ 
     var temp=JSON.stringify(vals); 

     var manager = JSON.parse(temp)[0]; 

     if(req.body.password===manager.password){ 
      req.session.manager = manager; 


      //You are redirecting user to home 
      res.redirect('/home'); 

      //You should add 'return' 
      return; 
     } 

     //This will only accessible if password is not match 
     res.send('ID or password wrong!'); 
    }); 
}); 
0

場合、私はに返す必要があります:あなたは、次のスニペットで問題がある

if(req.body.password===manager.password)  
{ 
    req.session.manager = manager; 
    res.redirect('/home'); 
    return; 
    } 
0

if(req.body.password===manager.password){ 
    req.session.manager = manager; 
    res.redirect('/home'); 
} 
res.send('ID or password wrong!'); 

エラースタックトレースから、送信後にヘッダーを設定しようとしていることは明らかです。 ifが最初に実行され、それが真の場合は/homeにリダイレクトされた後、if句を終了し、ユーザーにメッセージを送信しようとします。

解決策

if(req.body.password===manager.password){ 
    req.session.manager = manager; 
    res.redirect('/home'); 
} else { 
    res.send('ID or password wrong!'); 
} 

それはあなたを助けている場合、それを確認してください。

関連する問題