如何在nodeJs和Express中使用端点来实现过滤器?

时间:2020-09-16 14:11:30

标签: node.js api express

我正在构建一个小型应用程序,并且坚持使用后端。测试端点时,我会收到所有书籍,还有一本书。当尝试按类别,价格和名称实施过滤时,会给我所有书籍,有人可以告诉我我做错了吗?非常感谢。我还用mysql工作台创建了一个数据库,所有数据都来自那里。以下是我的代码:

//Get all books
app.get("/api/books", (req, res) => {
  let mysql = "SELECT * FROM books";
  let query = conn.query(mysql, (err, results) => {
    if (err) throw err;
    res.send(JSON.stringify({ status: 200, error: null, response: results }));
  });
});

//Get single product
app.get("/api/books/:id", (req, res) => {
  let mysql = "SELECT * FROM books WHERE id=" + req.params.id;
  let query = conn.query(mysql, (err, results) => {
    if (err) throw err;
    res.send(JSON.stringify({ status: 200, error: null, response: results }));
  });
});


 I am getting same result with these two url:(http://localhost:3000/books?category=stories and http://localhost:3000/books)

app.get("api/books", (req, res) => {
  const category = req.query.category;
  const categoryBooks = Books.filter((cat) => cat.category === category);
  res.send(categoryBooks);
});

1 个答案:

答案 0 :(得分:0)

将此粘贴​​到代码中,并且我还提供URL端点,因此将其复制粘贴到浏览器中。 // URL端点示例:http:// localhost:3000 / api / books / filter?category = store

// URL endpoint example : http://localhost:3000/api/books/filter?category=store
app.get("/api/books/filter", (req, res) => {
    const category = req.query.category;
    console.log("category is : ",category)

    // const categoryBooks = Books.filter((cat) => cat.category === category);
    let mysql = "SELECT * FROM books ;" 
    let query = conn.query(mysql, (err, results) => {
      if (err) throw err;

      const categoryBasedBooks = results.filter((book)=>book.category===category)
      console.log("categoryBasedBooks :", categoryBasedBooks )

      res.send(JSON.stringify({ status: 200, error: null, response: results }));
    });

});

// URL endpoint example : http://localhost:3000/api/books/nofilter?category=store
app.get("/api/books/nofilter", (req, res) => {
  const category = req.query.category;
  console.log("category is : ",category)

  // You can get same results without using filter by using SQL query WHERE clause
  let mysql = `SELECT * FROM books WHERE category='${category}' ;`
  let query = conn.query(mysql, (err, results) => {
    if (err) throw err;
    console.log("categoryBasedBooks :", results )
    res.send(JSON.stringify({ status: 200, error: null, response: results }));
  });
  
});