NodeJS Express:我有两个 app.get 请求,它们混合在一起

NodeJS Express: I have two app.get requests and they blend together

所以我有 1 个请求是

app.get('/assignment/loans', (req, res) => { 
    const id = req.query.bookID;
}

还有一个是这样的:

app.get('/assignment/loans', (req, res) => {
    const id = req.query.studentID;
}

不知什么原因,studentID那个不行,总是去bookID找。我用这个

http://localhost:3000/assignment/loans?bookID=1

它按预期工作,但如果我使用

http://localhost:3000/assignment/loans?studentID=9653

我得到:

这是一个应该只出现在 bookID 上的错误。我怎样才能区分这两者?提前谢谢你。

关于这两个请求的更多代码:https://pastebin.com/1A0jK3BX

实际上 express 框架将在请求发生时执行第一个端点,即

app.get('/assignment/loans', (req, res) => { const id = req.query.bookID;})

在重复端点的情况下,所以你应该使用一个路由并进行两个查询 而不是一个,所以代码将是这样的

app.get('/assignment/loans', (req, res) => { 
const book_id = req.query.bookID;
const student_id = req.query.studentID
})
  

您还必须在数据库中执行之前对查询进行验证

你们有完全相同的路线

app.get('/assignment/loans', ...)必须是一条路线。

尝试像下面这样组合 em

app.get('/assignment/loans', (req, res) => {
  const bookId = req.query.bookID;
  const studentId = req.query.studentID;
  const loans = [];

  if(bookId){
    if(!Number.isInteger(parseInt(studentId))){
      return res.status(422)
        .setHeader('content-type', 'application/json')
        .send({error: 'bookId not numeric'});
    }
    db.all('SELECT * FROM loan WHERE bookID=?', bookId, (err, rows) => {
      if (err) {
        res.status(422)
          .setHeader('content-type', 'application/json')
          .send({error: 'Problem while querying database'});
        return;
      }
      if (rows.length === 0) {
        res.status(404)
          .setHeader('content-type', 'application/json')
          .send({error: 'loan bookId was not found!'});
      } else {
        rows.forEach(row =>
          loans.push({id: `${row.id}`, bookID: `${row.bookID}`}));
        res.status(200)
          .setHeader('content-type', 'application/json')
          .send(loans);
      }
    });
  }else if(studentId){
    if(!Number.isInteger(parseInt(studentId))){
      return res.status(422)
        .setHeader('content-type', 'application/json')
        .send({error: 'studentId not numeric'});
    }
    db.all('SELECT * FROM loan WHERE studentID=?', studentId, (err, rows) => {
      if (err) {
        return res.status(422)
          .setHeader('content-type', 'application/json')
          .send({error: 'Problem while querying database'});
      }
      if (rows.length === 0) {
        res.status(404)
          .setHeader('content-type', 'application/json')
          .send({error: 'loan studentId was not found!'});
      } else {
        rows.forEach(row =>
          loans.push({id: `${row.id}`, studentID: `${row.studentID}`}));
        res.status(200)
          .setHeader('content-type', 'application/json')
          .send(loans);
      }
    });
  }else{
    return res.status(400)
      .setHeader('content-type', 'application/json')
      .send({error: 'Please provide required query string'});
  }
});

您不能有 2 条路线具有相同的 url。第一个优先。 你需要这样处理。

app.get('/assignment/loans', (req, res) => { 
   const bookID = req.query.bookID;
   const studentID = req.query.studentID;
   if(bookID){
   }
   if(studentID){
   }

}

简单回答:

app.get('/assignment/loans', (req, res) => {
    const id = req.query.studentID ? req.query.studentID : req.query.bookID
}