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

Node.js WebAPI部署至IIS后出现connection.queryRaw is not a function错误求助

问题描述

我是Node.js新手,正在使用Node.js和MSSQL数据库开发WebAPI。开发环境下通过npm run start启动服务器时,POST接口能正常返回响应,但将API部署到Windows IIS后,出现connection.queryRaw is not a function错误。

路由代码

router.post('/',async (req,res,next)=>{
    // console.log('Enter products creation')
    const Product = Array.from(req.body) // req.body  

    // console.log('New Product details passed on',Product)
    const createProd = require('../CreateProduct')
    const response = await createProd(Product)

    res.status(404).json({
        message : response.retStatus
    })
})

CreateProduct函数代码

const sql = require("mssql/msnodesqlv8");
const dataAccess = require("../DataAccess");

const fn_CreateProd = async function (product) {
  let errmsg = "";
  let objBlankTableStru = {};
  let connPool = null;
  // console.log('Going to connect with Connstr:',global.config)
  await sql
    .connect(global.config)
    .then((pool) => {
      global.connPool = pool;
      
      productsStru = pool.request().query("DECLARE @tblProds tvp_products select * from @tblProds");

      return productsStru;
    })
    .then(productsStru=>{
      objBlankTableStru.products = productsStru

      productsOhStru = global.connPool.request().query("DECLARE @tblprodsOh tvp_product_oh select * from @tblprodsOh");
      
      return productsOhStru
    })
    .then((productsOhStru) => {
      objBlankTableStru.products_oh = productsOhStru
      
      let objTvpArr = [
        {
          uploadTableStru: objBlankTableStru,
        },
        {
          tableName : "products",
          tvpName: "tvp_products",
          tvpPara: "tblProds"
        },
        {
          tableName : "products_oh",
          tvpName: "tvp_product_oh",
          tvpPara: "tblProdsOh",
        }        
      ];

      newResult = dataAccess.getPostResult(
        objTvpArr,
        "sp3s_ins_products_tvp",
        product
      );

      console.log("New Result of Execute Final procedure", newResult);
      return newResult;
    })
    .then((result) => {
      // console.log("Result of proc", result);
      if (!result.recordset[0].errmsg)
        errmsg = "New Products Inserted successfully";
      else errmsg = result.recordset[0].errmsg;
    })
    .catch((err) => {
      console.log("Enter catch of Posting prod", err.message);
      errmsg = err.message;
      if (errmsg == "") {
        errmsg = "Unknown error from Server... ";
      }
    })
    .finally((resp) => {
      sql.close();
    });
  return { retStatus: errmsg };
};

module.exports = fn_CreateProd;

getPostResult函数代码

const getPostResult = (
  tvpNamesArr,
  procName,
  sourceData,
  sourceDataFormat,
  singleTableData
) => {
  let arrtvpNamesPara = [];
  let prdTable = null;
  let newSrcData = [];

  // console.log("Source Data :", sourceData);
  let uploadTable = tvpNamesArr[0];

  for (i = 1; i <= tvpNamesArr.length - 1; i++) {
    let tvpName = tvpNamesArr[i].tvpName;
    let tvpNamePara = tvpNamesArr[i].tvpPara;
    let TableName = tvpNamesArr[i].tableName;

    let srcTable = uploadTable.uploadTableStru[TableName];
    srcTable = srcTable.recordset.toTable(tvpName);

    let newsrcTable = Array.from(srcTable.columns);

    newsrcTable = newsrcTable.map((i) => {
      i.name = i.name.toUpperCase();
      return i;
    });
    if (!singleTableData) {
      switch (sourceDataFormat) {
        case 1:
          newSrcData = sourceData.filter((obj) => {
            return obj.tablename.toUpperCase() === TableName.toUpperCase();
          });
          break;
        case 2:
          newSrcData = getObjectDatabyKey(sourceData, TableName);
          break;
        default:
          newSrcData = getTableDatabyKey(sourceData, TableName);
          break;
      }
    } else {
      newSrcData = sourceData;
    }

    // console.log(`Filtered Source data for Table:${TableName}`, newSrcData);
    prdTable = generateTable(
      newsrcTable,
      newSrcData,
      tvpName,
      sourceDataFormat
    );

    arrtvpNamesPara.push({ name: tvpNamePara, value: prdTable });
  }

  const newResult = execute(procName, arrtvpNamesPara);
  return newResult;
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 00:35:20