Nodejs неверный синтаксис ввода для целочисленной ошибки - PullRequest
1 голос
/ 10 января 2020

Я использую 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 });
      });
    });

этот код - мой код маршрутизатора, но когда я ввел этот URL, это была ошибка

   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 делает ошибку

Ответы [ 2 ]

1 голос
/ 10 января 2020
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 берет и совпадает с первым. Это не удалось, вот почему вы получили эту ошибку.

1 голос
/ 10 января 2020

как упоминалось @tadman, вам нужно определить функцию app.get("/topic/create перед функцией app.get("/topic/:id". в противном случае express считает, что вы выполняете app.get("/topic/:id", а идентификатор - create.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...