Ich habe diesen Code gescherzt, um einen Wert aus einer Datenbankspalte zur Ausgabe mit im JSON-Array zu erhalten. Ich schaffte es, es auf der Browser-Konsole zu bekommen, also versuchte ich es mit einem anderen Wert und benutzte das gleiche Format zum Code, um es von meiner Klassendatei an den Router app.post in der anderen Datei zu übergeben. Ich kann es auf dem Terminal sehen, wenn ich console.log
benutze, aber ich kann die Ausgabe in der Browserantwort nicht sehen, also, was ist falsch?Node.js JSON-Encode - Array-Ausgabe ist leer
Der Code, der erfolgreich druckt Ausgabe:
auth.js
, Router Teil
app.post('/dispalymove', function (req, res, next) {
var lMove="";
if(req.body.MoveString !== null){
Move.setMoveUserId(req.user.id);
Move.setMoveString(req.body.MoveString);
lMove = a.getLastMove(req.user.GameId,function(move){
console.log("Return from display move:",move);
});
}
var output = {"msg":lMove, "loggedin":"true"};
res.send(JSON.stringify(output));
});
Die Funktion, die ich auf move.js
Datei aufrufen:
getLastMove(id,callback){
var MoveRequest = "SELECT * FROM users ORDER BY id";
var query = connection.query(MoveRequest, function(err,rows, result) {
if (rows.length == 0) {
return callback ("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1");
}
if (rows.length > 0) {
for (var i in rows) {
var move = rows[i].MoveString;
if (rows[i].GameId == id){
callback(move);
}
}
}
});
var move="rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
return move;
}
Die Antwort auf die Browser-Konsole, wenn die Ausgabe ist erfolgreich:
msg:"rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"
loggedin:"true"
der Ausgabe-Code, der das Problem
app.post('/getcolor', function (req, res, next) {
var lCol="";
if(req.body.MoveString !== null){
Move.setMoveUserId(req.user.id);
lCol = a.getColor(req.user.id,function(col){
console.log("Return from getcolor:",col)
//the the value that i get on terminal "Return from getcolor:white"
});
}
var output = {"msg":lCol, "loggedin":"true"};
res.send(JSON.stringify(output));
});
Die Funktion, die ich von der anderen Datei anrufen:
getColor(id,callback){
var ColRequest = "SELECT * FROM users ORDER BY id";
var query = connection.query(ColRequest, function(err,rows, result) {
if (rows.length == 0) {
return callback ("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1");
}
if (rows.length > 0) {
for (var i in rows) {
var col = rows[i].GameColor;
if (rows[i].id == id){
callback(col);
}
}
}
});
var col="";
return callback(col);
}
Der Wert, den ich in meiner Browser-Konsole Antwortausgabe erhalte
nurloggedin:"true"
das sollte so sein
msg:"white"
loggedin:"true"
Ich habe versucht, diesen Code mit PHP zu schreiben, wie die
session_start();
include "../classes/move.php";
$lCol="";
if(isset($_POST['MoveString'])){
$move = new move();
$move->setMoveUserId($_SESSION['UserId']);
$lCol=$move->getColor($_SESSION['UserId']);
}
$output = array("msg"=>"$lCol", "loggedin"=>"true");
echo json_encode($output);
und die Funktion zu schreiben getcolor, die ich
public function getColor($id){
include "../../connectToDB.php";
$ColRequest=$_db->query("SELECT * FROM users ORDER BY UserId");
$existCount = $ColRequest->rowCount();
if ($existCount == 0) { // evaluate the count
return "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1";
}
if ($existCount > 0) {
while($row = $ColRequest->fetch(PDO::FETCH_ASSOC)){
$userID = $row["UserId"];
$col = $row["GameColor"];
if($userID == $id) {
return $col;
}
}
}
$col="";
return $col;
}
und der Ausgang war rufen, dass auf Browser-Konsole Antworten
msg:"white"
loggedin:"true"
Ignorieren von Fehlern, die über asynchrone Rückrufe zurückgegeben werden, ist _never_ eine gute Idee. –
@partycoder Danke, aber das hat nicht anders gemacht noch Ausgabe leer –