You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WHERE条件查询MSSQL无结果,求排查Angular+Node.js代码问题

问题排查:Angular+Node.js+MSSQL查询无返回结果

以下是代码中的关键错误及修正方案:

1. 前端GET请求参数传递错误

Angular的HttpClient.get()第二个参数是请求配置对象,直接传手机号会被当成配置项,导致后端无法接收参数。

错误代码(Service.ts):

getCustomerData(Phone_Number: any) {
  return this.http.get(`${this.url}/orders/getcustomer`,Phone_Number);
}

修正方案(二选一):

  • 方案一:使用路由参数
getCustomerData(Phone_Number: any) {
  return this.http.get(`${this.url}/orders/getcustomer/${Phone_Number}`);
}
  • 方案二:使用查询参数
import { HttpParams } from '@angular/common/http';

getCustomerData(Phone_Number: any) {
  const params = new HttpParams().set('phone', Phone_Number);
  return this.http.get(`${this.url}/orders/getcustomer`, { params });
}

2. 后端路由与参数接收不匹配

当前后端路由/getcustomer未定义参数占位符,req.params.phone无法获取到值,导致查询条件无效。

对应前端方案一的后端修正:

修改路由定义:

router.get("/getcustomer/:phone", custData); // 新增:phone路由参数

修正custData参数逻辑:

custData: (req, res) => {
  const phone = req.params.phone; // 原代码中let phone = req.phone无意义,req.phone不存在
  checkCustPhone(phone,(error, result) => {
    if (error) {
      return res.status(500).send({ status: 0, message: error.message }); // 错误时不要访问result.recordset,此时result为undefined
    }
    return res.send({ status: 1, data: result.recordset });
  });
}

对应前端方案二的后端修正:

从查询参数中获取手机号:

custData: (req, res) => {
  const phone = req.query.phone;
  checkCustPhone(phone,(error, result) => {
    if (error) {
      return res.status(500).send({ status: 0, message: error.message });
    }
    return res.send({ status: 1, data: result.recordset });
  });
}

3. SQL查询存在注入风险+类型不匹配问题

直接字符串拼接SQL语句,不仅有SQL注入风险,还可能因手机号类型不匹配(如数据库中Phone_Number为数字类型,加单引号后变成字符串查询)导致无结果。

错误代码:

checkCustPhone: (phone, callback) => {
  connection.query(
    `select * from tbl_customers where Phone_Number='${phone}'`,
    (error, result) => {
      if (error) {
        return callback(error);
      }
      return callback(null, result);
    }
  );
}

修正为参数化查询:

checkCustPhone: (phone, callback) => {
  // 使用?作为占位符,自动匹配类型并避免注入
  connection.query(
    'select * from tbl_customers where Phone_Number = ?',
    [phone], // 参数数组
    (error, result) => {
      if (error) {
        return callback(error);
      }
      return callback(null, result);
    }
  );
}

4. 后端错误处理逻辑错误

当查询出现错误时,result为undefined,此时访问result.recordset会抛出异常,导致接口崩溃。

错误代码:

if (error) {
  return res.send({ status: 0, data: result.recordset });
}

修正:

if (error) {
  return res.status(500).send({ status: 0, message: error.message });
}

内容的提问来源于stack exchange,提问作者Enrique Ferolino

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:07:17