在Node.js服务器中,路由获取请求数据如下:
router.get("/dog", (req, res) => { // req.something... });
出于调试目的,我想检查作为req对象发送的调用内容,如下所示:
req
fetch("/app/dog").then(/*...*/)
在发送请求之前,有没有办法访问**req参数**?(我可以在我的路由中进行这样的调试,但是我想在进行fetch调用之前执行这种检查)。谢谢!
c2e8gylq1#
如果你使用fetch,你可能想给原生的window.fetch函数添加功能(方法),这不是一个好主意。最简单的方法是(在前端)使用一个已经提供了请求interceptors like Axios的库。下面是一个例子,我们发送name=doggo作为请求参数,然后我们仍然在前端将字符串修改为"doggo intercepted",然后,我们在后端使用Express Middleware将该字符串修改为"doggo intercepted and middlewared",最后将最终字符串记录在指定的路由处理程序中:index.html
window.fetch
name=doggo
"doggo intercepted"
"doggo intercepted and middlewared"
<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}`) });
vltsax252#
如果你正在使用axios,你可能想在你的前端研究拦截器:https://axios-http.com/docs/interceptors简单的方法来记录传出的请求或对它们进行一些修改。
yquaqz183#
简短的版本是“不”。req参数在客户端发送请求 * 之后,以及在服务器接收到它的头之后被创建。
3条答案
按热度按时间c2e8gylq1#
如果你使用fetch,你可能想给原生的
window.fetch
函数添加功能(方法),这不是一个好主意。最简单的方法是(在前端)使用一个已经提供了请求interceptors like Axios的库。
下面是一个例子,我们发送
name=doggo
作为请求参数,然后我们仍然在前端将字符串修改为
"doggo intercepted"
,然后,我们在后端使用Express Middleware将该字符串修改为
"doggo intercepted and middlewared"
,最后将最终字符串记录在指定的路由处理程序中:index.html
index.js(Node)
vltsax252#
如果你正在使用axios,你可能想在你的前端研究拦截器:https://axios-http.com/docs/interceptors
简单的方法来记录传出的请求或对它们进行一些修改。
yquaqz183#
简短的版本是“不”。
req
参数在客户端发送请求 * 之后,以及在服务器接收到它的头之后被创建。