发送请求前访问`Node.js`路由的请求参数

jgwigjjp  于 2023-06-22  发布在  Node.js
关注(0)|答案(3)|浏览(158)

在Node.js服务器中,路由获取请求数据如下:

router.get("/dog", (req, res) => {
   // req.something...
});

出于调试目的,我想检查作为req对象发送的调用内容,如下所示:

fetch("/app/dog").then(/*...*/)

在发送请求之前,有没有办法访问**req参数**?(我可以在我的路由中进行这样的调试,但是我想在进行fetch调用之前执行这种检查)。谢谢!

c2e8gylq

c2e8gylq1#

如果你使用fetch,你可能想给原生的window.fetch函数添加功能(方法),这不是一个好主意。
最简单的方法是(在前端)使用一个已经提供了请求interceptors like Axios的库。
下面是一个例子,我们发送name=doggo作为请求参数,
然后我们仍然在前端将字符串修改为"doggo intercepted"
然后,我们在后端使用Express Middleware将该字符串修改为"doggo intercepted and middlewared",最后将最终字符串记录在指定的路由处理程序中:
index.html

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

<script>
// Add a request interceptor
// https://axios-http.com/docs/interceptors
axios.interceptors.request.use((config) => {
  // Do something before request is sent:
  // Modify param name
  config.params.name += " intercepted"; // << modify the "doggo" string
  console.log(config);
  return config;
}, (err) => Promise.reject(err));

// Init GET request:
axios.get("/app/dog", {
  params: {
    name: "doggo"
  }
});
</script>

index.js(Node)

import express from "express";
import path from "path"
import url from "url";
const __dirname = url.fileURLToPath(new URL(".", import.meta.url));

const app = express();
const port = 3000;

// Create a middleware:
// https://expressjs.com/en/guide/using-middleware.html
app.use('/app/:animal', (req, res, next) => {
  // If route "dog", do something
  if (req.params.animal === "dog") {
    req.query.name += " and middlewared"; // << modify the "doggo intercepted"
  }
  // Pass through
  next();
})

app.get("/", (req, res) => {
  res.sendFile(path.join(__dirname, "/index.html"));
});

app.get("/app/dog", (req, res) => {
  console.log(req.query); // { name: 'doggo intercepted and middlewared' }
});

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
});
vltsax25

vltsax252#

如果你正在使用axios,你可能想在你的前端研究拦截器:https://axios-http.com/docs/interceptors
简单的方法来记录传出的请求或对它们进行一些修改。

yquaqz18

yquaqz183#

简短的版本是“不”。req参数在客户端发送请求 * 之后,以及在服务器接收到它的头之后被创建。

相关问题