【问题标题】:Why does NodeJS with Express Output is 1 offset?为什么 NodeJS with Express Output 是 1 个偏移量?
【发布时间】:2022-11-27 12:02:54
【问题描述】:

来自 NodeJS 的响应的偏移量为 1。 例如: 1 查询:A 输出:空响应2 查询:B 输出:A 3 查询:C 输出:B

如果您需要 API/JSON 输出,请告诉我。

我觉得我只是在这里遇到逻辑问题。或者是否有此偏移量的命令?


const express = require('express');

// Constants
const PORT = 8080;
const HOST = '0.0.0.0';


var resultQueryFilter = "";
var search_param = "";


var Connection = require('tedious').Connection;  
var config = {  
    server: '172.17.0.2',  
    authentication: {
        type: 'default',
        options: {
            userName: 'sa',
            password: 'PW' 
        }
    },
    options: {
        encrypt: false,
        useUTC: true,
        database: 'Park'  
    }
}; 
var connection = new Connection(config);  
connection.on('connect', function(err) {  
    // If no error, then good to proceed. 
    if(err) {
        console.log('Error: ', err)
      } else {
        console.log("Successful connection");
      } 
});
  

connection.connect();

var Request = require('tedious').Request;  
var TYPES = require('tedious').TYPES;  

function executeStatementQuery() {  
  request = new Request("SELECT * from dbo.users WHERE first_name like '%" +search_param+ "%' FOR JSON PATH;", function(err) {  
  if (err) {  
      console.log(err);}  
  });  
  request.on('row', function(columns) {  
      columns.forEach(function(column) {  
        if (column.value === null) {  
          console.log('NULL');  
        } else {  
          resultQueryFilter+= column.value + " ";  
        }  
      });  
      //console.log(resultQueryFilter);  
  });  
  connection.execSql(request);  
}


const app = express();
app.get('/company/search', (req, res) => {
  search_param = String(req.query.company_name);

  if (!search_param) {
    //No search param send
    console.log("Search request ist empty. Returning HTTP-406");
    res.status(406).send("Forbidden."); //Forbidden, as query cannot be empty
  } else {
    console.log("API Call with search req");
    console.log("Going to execute query");
    executeStatementQuery();
    console.log("Executed Query");
    console.log("Returning Output as JSON: " + String(resultQueryFilter));
    res.send(resultQueryFilter);
    console.log("Clearing old params");
    search_param = "";
    resultQueryFilter = "";
    console.log("Request done");

  }
});


app.listen(PORT, HOST, () => {
  console.log(`Running on http://${HOST}:${PORT}`);
});

否则无法发布:ererwearew rqe reader nsfw

【问题讨论】:

  • executeStatementQuery 中的变量request 是全局的,因为你忘记了(?)变量名前的var。因此,相同的 request 将被您进行的所有查询“共享”,这可能会导致各种令人惊讶的结果。
  • 感谢您指出此错误。不幸的是,这并没有解决问题....

标签: javascript node.js sql-server api http


【解决方案1】:

您的代码使用全局变量requestresultQueryFilter,它们将被您进行的所有查询同时使用。这不会导致正确(甚至可预测)的结果。

使用局部变量:

app.get('/company/search', function(req, res) {
  var search_param = String(req.query.company_name);
  var request = new Request("SELECT * from dbo.users WHERE first_name like '%" +search_param+ "%' FOR JSON PATH;",
    function(err) {
      if (err) console.log(err);
    });
  var resultQueryFilter = "";
  request.on('row', function(columns) {
    columns.forEach(function(column) {
      if (column.value === null) {
        console.log('NULL');
      } else {
        resultQueryFilter += column.value + " ";
      }
    });
  });
  request.on('done', function() {
    res.send(resultQueryFilter);
  });
  connection.execSql(request);
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-12
    • 2021-04-29
    • 2012-07-04
    • 2019-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多