php - 如何将php mysql查询重写为nodejs mysql查询
问题描述
我来自 php 背景,现在学习如何将 php mysql 查询移动到 nodejs。我已经学会了如何使用 nodejs 插入、更新和删除。
现在我有 php 中的代码,它以 json 格式返回查询。我想要的是如何将其重写为 nodejs json 格式。
下面是工作的php
if($request == 1){
$result_arr = array();
$query = "SELECT * FROM user where email='ann@gmail.com' ";
$result = mysqli_query($con,$query);
while($row = mysqli_fetch_array($result)){
$uid = $row['uid'];
$name = $row['username'];
// Checking user status
$status_query = "SELECT count(*) as cntStatus FROM user_count_table WHERE uid='$uid'";
$status_result = mysqli_query($con,$status_query);
$status_row = mysqli_fetch_array($status_result);
$count_status = $status_row['cntStatus'];
$result_arr[] = array("id" => $uid, "username" => $name, "my_count" => $total_count);
}
echo json_encode($result_arr);
exit;
}
下面是我试图将上述 php 代码移至 nodejs 但无法使其工作的努力。
var connection = require('./config');
module.exports.getdata=function(req,res){
var email='ann@gmail.com';
connection.query('SELECT * FROM users WHERE email = ?',[email], function (error, results, fields) {
uid==results[0].uid;
name==results[0].username;
connection.query('SELECT count(*) as cntStatus FROM user_count_table WHERE uid= ?',[uid], function (error, results, fields) {
total_count==results[0].cntStatus;
});
if (error) {
console.log('error');
res.json({
status:false,
message:'there are some error with the query'
})
}else{
result_arr[] = array("id" => uid, "username" => name, "my_count" => total_count);
console.log('query okay');
res.json({
//data:results,
data:result_arr
})
}
});
}
解决方案
有几件事需要重构。您应该已经在第一个回调中检查错误。如果不存在错误,请执行第二个查询并将您组装响应的代码移动到回调中。像这样的东西:
var connection = require('./config');
module.exports.getdata = function (req, res) {
var email = 'ann@gmail.com';
connection.query('SELECT * FROM users WHERE email = ?', [email], function (error, results, fields) {
if (error) {
console.log('error');
res.json({
status : false,
message : 'there are some error with the query'
});
} else {
var uid == results[0].uid;
var name == results[0].username;
connection.query('SELECT count(*) as cntStatus FROM user_count_table WHERE uid= ?', [uid], function (error, results, fields) {
if (error) {
console.log('error');
res.json({
status : false,
message : 'there are some error with the query'
});
} else {
var total_count == results[0].cntStatus;
var result = {
"id" : uid,
"username" : name,
"my_count" : total_count
};
console.log('query okay');
res.json({
//data:results,
data : result
});
}
});
}
});
}
您还想要将响应数据作为对象,即 JS 等效于 PHP 中的关联数组。
一句话建议:使用promises / async await,因为它可以帮助您保持代码更清洁并防止回调地狱。
推荐阅读
- cordova - 覆盖 CapacitorWebView 上的 shouldOverrideUrlLoading 和 onPageFinished
- ios - 在不中断背景媒体播放的情况下录制音频
- node.js - JSON.parse() 导致没有任何数据的错误
- python-3.x - Python中的多元线性回归机器学习
- android - Android VOIP 应用程序
- asp.net-core-2.2 - AspNet 核心 401 - 添加令牌时没有 SecurityTokenValidator
- git - 如何分叉和修改 Google API Go 客户端 SDK 以解决 Slides API Range 问题?
- php - woocommerce 自定义电子邮件模板 php
- localhost - 从 iPhone 访问本地主机 - WAMP
- javascript - 如何在 Angular 中保存组件的状态?