节点 axios 作为中间件

node axios as middleware

我正在尝试构建一个中间件,然后在 app.get 路由中使用它。 我知道它看起来很“先锋”,但我正在学习....我怎样才能让它工作?

const BooksMiddle = async (req, res, next) => {
  axios
    .get(`https://www.googleapis.com/books/v1/volumes/? q=${term}&keyes&key=${process.env.GBOOKSKEY}`)
    .then((result) => {
      const data = result.data;
      const books = data.items;
      return books;
 });
   next();
}

module.exports = textMiddle;
app.get("/", textMiddle, (req, res, next) => {
  res.render('index');
});

如果这个中间件的目的是获取一些书籍数据并使其可用于您的模板渲染,那么您可以将该数据放入 res.locals 中,从 res.render() 调用的模板将自动查找对于数据:

const bookMiddle = async (req, res, next) => {
    axios
        .get(`https://www.googleapis.com/books/v1/volumes/?q=${term}&keyes&key=${process.env.GBOOKSKEY}`)
        .then((result) => {
            res.locals.books = result.data.items;
            next();
        }).catch(next);
}

module.exports = bookMiddle;

然后,导入 bookMiddle 之后,您可以像这样使用它:

app.get("/", bookMiddle, (req, res, next) => {
  res.render('index');
});

如果您在模板中引用 books 数据结构,模板引擎将在 res.locals.books 中查找该数据(中间件放置数据的位置)。