首页 > 解决方案 > 如何将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       

        })
      }

}); 
}

标签: phpnode.js

解决方案


有几件事需要重构。您应该已经在第一个回调中检查错误。如果不存在错误,请执行第二个查询并将您组装响应的代码移动到回调中。像这样的东西:

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,因为它可以帮助您保持代码更清洁并防止回调地狱。


推荐阅读