【问题标题】:Nodejs invalid input syntax for integer error整数错误的Nodejs无效输入语法
【发布时间】:2020-04-27 18:33:41
【问题描述】:

我使用 postgres sql、nodejs、express

     app.get("/topic/create", function(req, res) {
      var sql = "SELECT id, title FROM topic";
      client.query(sql, function(err, res2) {
        console.log(res2.rows);
        //res.render("create", { topics: res2.rows });
      });
    });

这个代码是我的路由器代码 但是当我输入该网址时,它是错误的

   error: invalid input syntax for integer: "create"
  name: 'error',
  length: 110,
  severity: 'ERROR',
  code: '22P02',  line: '62',routine: 'pg_atoi'  

我不知道原因,因为 sql 在其他 url 上工作,只是 app.get 代码不起作用

    //라우팅 작업
    app.get("/", function(req, res) {
      res.redirect("/topic");
    });
    app.get("/topic", function(req, res) {
      var sql = "SELECT id, title FROM topic";
      client.query(sql, function(err, res2) {
        if (err) {
          console.log(err);
        } else {
          res.render("view", { topics: res2.rows });
        }
      });
    });
app.get("/topic/:id", function(req, res) {
  var id = req.params.id;
  var sql1 = "SELECT id, title FROM topic";
  var sql2 = "SELECT * FROM topic where id=$1";
  client.query(sql2, [id], function(err, res2) {
    if (err) {
      console.log(err);
    } else {
      client.query(sql1, function(err, res3) {
        if (err) {
          console.log(err);
          res.status(500).send("Internal Server Error");
        } else {
          var list = [];
          var result = res3.rows;
          for (var i = 0; i < result.length; i++) {
            list.push(res3.rows[i]);
          }
          res.render("view", { details: res2.rows, topics: list });
        }
      });
    }
  });
});

这是我的路由器代码,它是一样的。这段代码很好用

我不知道为什么只有那个 url 会出错

【问题讨论】:

  • 您是否在 /topic/:id 之前定义了您的 /topic/create 路由?
  • 是的,我做了 /topic/:id
  • @tadman 我在我的问题中添加 /topic/:id 代码
  • whats $1,你是不是特意定义的

标签: node.js postgresql express


【解决方案1】:
app.get("/topic/create", function(req, res) {
      var sql = "SELECT id, title FROM topic";
      client.query(sql, function(err, res2) {
        console.log(res2.rows);
        //res.render("create", { topics: res2.rows });
      });
    });

你必须把这个路由器放在第一位,然后放在一个下面,

app.get("/topic/:id", function(req, res) {
  var id = req.params.id;
  var sql1 = "SELECT id, title FROM topic";
  var sql2 = "SELECT * FROM topic where id=$1";
  client.query(sql2, [id], function(err, res2) {
    if (err) {
      console.log(err);
    } else {
      client.query(sql1, function(err, res3) {
        if (err) {
          console.log(err);
          res.status(500).send("Internal Server Error");
        } else {
          var list = [];
          var result = res3.rows;
          for (var i = 0; i < result.length; i++) {
            list.push(res3.rows[i]);
          }
          res.render("view", { details: res2.rows, topics: list });
        }
      });
    }
  });
});

这会起作用,因为快递取并与第一个匹配。它失败了,这就是你得到这个错误的原因。

【讨论】:

  • 我工作得很好。多谢。我不知道 express 对于函数顺序很重要
【解决方案2】:

正如@tadman 提到的,您需要在app.get("/topic/:id" 函数之前定义app.get("/topic/create 函数。否则,express 认为你正在执行 app.get("/topic/:id" 并且 id 是 create

希望这会有所帮助。

【讨论】:

  • 感谢您的帮助。我不知道函数顺序在 express 中很重要
  • 很高兴能帮上忙。
猜你喜欢
  • 2014-07-17
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-12
  • 2013-08-20
  • 1970-01-01
相关资源
最近更新 更多