http://localhost:3000/home?id=test
GETパラメータのidよりtestを取得し、MySQLのusersテーブルへ接続しカラムidにtestがあった場合はhomeへ、なかった場合はerrorへ。
上記を想定していたのですが、MySQLのconnection.query処理が非同期でreturnされる前に次の処理へ進んでしまい、GETパラメータ(id)による処理の分別(home||errorを表示)が出来ません。
async/awaitなど色々調べたのですが良く分かりませんでした。
どのようにコードを書くのが適切でしょうか?すいませんが、よろしくお願い致します。
javascript
1var http = require('http'); 2var fs = require('fs'); 3var path = require('path'); 4var mysql = require('mysql'); 5var url = require('url'); 6 7// サーバー 8var mime = { 9 ".html": "text/html", 10 ".css": "text/css" 11}; 12var server = new http.createServer(function(req, res) { 13 if (req.url.indexOf('home') !== -1) { 14 var url_parts = url.parse(req.url, true); 15 if (url_parts.query.id !== undefined) { 16 17 if (auth(url_parts.query.id)) { 18 filePath = '/home.html'; 19 } else { 20 filePath = '/error.html'; 21 } 22 } 23 } else { 24 filePath = req.url; 25 } 26 var fullPath = __dirname + filePath; 27 28 res.writeHead(200, {"Content-Type": mime[path.extname(fullPath)] || "text/plain"}); 29 fs.readFile(fullPath, function(err, data) { 30 if (!err) { 31 res.end(data, 'UTF-8'); 32 } else { 33 res.end("Not Found", 'UTF-8'); 34 } 35 }); 36}).listen(3000); 37 38// データベース 39function auth(id) { 40 try { 41 var connection = mysql.createConnection({ 42 host : 'host', 43 user : 'user', 44 password : 'password', 45 database : 'database' 46 }); 47 connection.connect(); 48 49 connection.query({ 50 sql: 'SELECT * FROM `users` WHERE `id` = ?', 51 timeout: 5000, 52 values: id 53 }, function (error, results, fields) { 54 if (results == '') { 55 console.log('存在しないユーザーです。'); 56 return false; 57 } else { 58 console.log('存在するユーザーです。'); 59 } 60 }); 61 connection.end(); 62 return true; 63 } catch (err) { } 64}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/17 02:50
2017/11/17 02:53
2017/11/17 02:59
2017/11/17 03:08
2017/11/17 03:14
2017/11/18 04:34