繁体   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