我想从MySQL数据库获取数据,我使用带有SQL的Node.js,这是我的服务器代码:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var mysql = require('mysql');
var connection = mysql.createConnection({
host : '127.0.0.1',
user : 'root',
password : '',
database : 'temp'
});
function getData(res){
var tempVal = 1377;
connection.connect();
connection.query('SELECT * FROM tempvalues ORDER BY datetime DESC LIMIT 1', function(err, rows){
console.log(rows);
tempVal = rows;
});
connection.end();
return tempVal;
}
app.get('/', function(req, res){
res.sendfile('index.html');
});
io.on('connection', function(socket){
socket.on('clientSent', function(data){
if(data == "GET")
socket.emit("serverSent", getData());
})
})
http.listen(3000, function(){
console.log('listening on *:3000');
});
如果我转到localhost:3000
我只获得1377
作为值而不是数据库中的实际值,即使控制台打印了正确的值。那是为什么?
答案 0 :(得分:2)
你的代码中有一些不好的东西。 第一。认为对数据库的查询在大多数情况下都是异步的。
您的代码已解释:
function getData(callback){
var tempVal = 1377;
connection.connect();
connection.query('SELECT * FROM tempvalues ORDER BY datetime DESC LIMIT 1', function(err, rows){
console.log(rows);
return callback(err, rows);
});
connection.end();
}
与异步代码作斗争的一种简单方法是回调。让你的getData函数看起来像:
io.on('connection', function(socket){
socket.on('clientSent', function(data){
if(data == "GET")
getData(function(error, result){
if(!error) socket.emit("serverSent", result);
});
})
});
然后使用如下函数:
<label asp-for="Files.PromoImage" class="col-md-2 control-label"></label>
<div class="col-md-10">
<input asp-for="Files.PromoImage" class="form-control" />
@if (Model.Content.NewArticle)
{
<span asp-validation-for="Files.PromoImage" class="text-danger"></span>
}
</div>
<div class="col-md-8">
<div asp-validation-summary="ValidationSummary.All" class="text-danger"></div>
</div>