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

使用Node Oracledb标准GET配置时,为何收到‘HTTP参数Unsanitized输入流入send’提示?

问题场景

当前环境为Angular前端搭配Node后端,数据库使用Oracle,依赖oracledb包。触发错误的代码位于Controller中的res.send(rows);行。


前端GET请求示例

getJobResult(id): Observable<JobResult[]> {
  const url = environment.hosturl + "job";
  const httpOptions = {
    headers: new HttpHeaders({
      "Access-Control-Allow-Origin": "*",
      "Content-Type": "application/json",
    }),
    withCredentials: true,
    params: {
      id: id,
    },
  };
  return this._http.get(url, httpOptions).pipe(
    map((res) => {
      if (res[0] && JSON.stringify(res[0]).includes("ERROR_MSG")) {
        // GET结果出错
        this.router.navigate(["/error"]);
      }
      
      return <JobResult[]>res;
    })
  );
}

API后端Controller示例

const job = require('../db_apis/job.js');

async function get(req, res, next) {
  try {
    const context = {};
    context.id = req.query.id;

    const rows = await job.find(context);

    res.send(rows);
    
  } catch (err) { 
    res.sendStatus(404);
    next(err);
  }
}

module.exports.get = get;

上述代码中的res.send(rows);行正是触发错误提示的位置。


API的DB API文件示例

const database = require('../services/database.js');

async function find(context) {
  let query = `SELECT  * FROM JOB WHERE JOB_ID = :V_ID`
  
  console.log(query);
  const binds = {
    V_ID: Number(context.id)
  };
  const result = await database.simpleExecute(query, binds, clientdetails);
  return result.rows;
}

module.exports.find = find;

执行的simpleExecute函数

async function simpleExecute(query, binds = [], clientdetails = [], opts = {}) {
  let conn;
  // 根据用户设置连接池
  let alias = 'client1';
  let simpleResult;
  console.log('Action for Client: ' + alias)

  opts.outFormat = oracledb.OBJECT;
  opts.autoCommit = true;

  try {
    // 获取连接
    conn = await oracledb.getConnection(alias);
    conn.callTimeout = 500 * 1000; // 将超时时间缩短至50秒
    // 执行语句
    simpleResult = await conn.execute(query, binds, opts);
  } catch (err) {
    console.error("Oracle Error ==>", err, "<== 此处显示Oracle错误!"); 
  } finally {
    // 最终关闭连接
    if (conn) {
      try {
        await conn.close();
        console.log('连接已关闭。')
      } catch (err) {
        console.log('关闭连接时出错: ' + err);
      }
      // 返回结果
      console.log('结果已返回。');
      return simpleResult
    }
  } 
}

module.exports.simpleExecute = simpleExecute;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:42:47