簡體   English   中英

connection.queryRaw 不是 NodeJs WebAPI 調用中的 function 錯誤

[英]connection.queryRaw is not a function error in NodeJs WebAPI call

我是 Nodejs 的新手。 我正在通過使用 NodeJs 和 MSSQl 作為數據庫來開發 WebAPI。我的 api 在 POST 端點的情況下給出了正確的響應,如果它在服務器通過 Dev 環境命令 [npm run start] 偵聽時被調用。 但是,如果我在 Windows IIS 上部署我的 API,則會出現上述錯誤。 我的參考 API 端點代碼如下:

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 function如下:

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;

GetPost() function 如下:

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;
};

最后,我找到了解決這個問題的方法。如果我在 app.js 中使用 Morgan Middleware 並通過語法使用它,這是非常奇怪、令人震驚和令人驚訝的: app.use(morgan('dev')) ,那么它是罪魁禍首的命令..我剛剛從這個命令中刪除了dev之后問題得到解決..但是我在谷歌的任何地方都沒有找到關於這個問題的幫助..我真的很擔心如果我在未來的發展中會面臨什么樣的挑戰這些愚蠢的錯誤沒有給出任何提示..如果有人能讓我理解這種愚蠢的錯誤,我將非常感激..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM