运行 服务器和使用浏览器浏览时,Expressjs 路由被调用两次
Expressjs Routes are invoked twice when running server and browsing using browser
当 运行
时,Expressjs 路由被调用两次
OS系统环境:Windows11、ExpressJS ("express": "^4.18.1", "version": "4.18.1"), Node v16.15.0
const url = require('url');
const path = require("path");
const express = require('express');
let app = express();
console.log("instantiation");
app.use("/language", function (req, res) {
const queryObject = url.parse(req.url, true).query;
console.log("/ language");
res.send("Testing server : language");
});
app.use("/", function (req, res) {
console.log("/ path");
res.send("Testing server : main page");
});
app.use("*", function (req, res) {
console.log("* path");
res.send(`"Testing my server"`);
});
app.listen(3001, "127.0.0.1", function () {
console.log(`Server listening at ` + 3001);
});
更新(下面的/
路由仍然被调用了两次)。有什么我想念的吗?:
const url = require('url');
const path = require("path");
const express = require('express');
let app = express();
console.log("instantiation");
app.use("/language", function (req, res) {
const queryObject = url.parse(req.url, true).query;
console.log("/ language");
res.send("Testing server : language");
});
app.use("/", function (req, res) {
console.log("/ path");
res.send("Testing server : main page");
});
app.listen(3001, "127.0.0.1", function () {
console.log(`Server listening at ` + 3001);
});
是我的系统问题还是 express/node 的真正问题?
您的路由处理程序被多次调用的原因是因为您使用的是 app.use('/')
而不是特定的方法处理程序,例如 app.get('/')
或 app.post('/')
.
app.use()
用于添加中间件,并将匹配请求路径的 base(与使用方法处理程序相反,它将匹配 完整路径)。
换句话说,app.use('/')
将匹配 任何 尚未被之前声明的其他处理程序处理的请求。这包括对 /favicon.ico
的请求,浏览器通常在打开页面时执行这些请求。它还会将请求匹配到 /foo/bar
,例如。
可以找到有关 app.use()
的更多信息 here。
当 运行
时,Expressjs 路由被调用两次OS系统环境:Windows11、ExpressJS ("express": "^4.18.1", "version": "4.18.1"), Node v16.15.0
const url = require('url');
const path = require("path");
const express = require('express');
let app = express();
console.log("instantiation");
app.use("/language", function (req, res) {
const queryObject = url.parse(req.url, true).query;
console.log("/ language");
res.send("Testing server : language");
});
app.use("/", function (req, res) {
console.log("/ path");
res.send("Testing server : main page");
});
app.use("*", function (req, res) {
console.log("* path");
res.send(`"Testing my server"`);
});
app.listen(3001, "127.0.0.1", function () {
console.log(`Server listening at ` + 3001);
});
更新(下面的/
路由仍然被调用了两次)。有什么我想念的吗?:
const url = require('url');
const path = require("path");
const express = require('express');
let app = express();
console.log("instantiation");
app.use("/language", function (req, res) {
const queryObject = url.parse(req.url, true).query;
console.log("/ language");
res.send("Testing server : language");
});
app.use("/", function (req, res) {
console.log("/ path");
res.send("Testing server : main page");
});
app.listen(3001, "127.0.0.1", function () {
console.log(`Server listening at ` + 3001);
});
是我的系统问题还是 express/node 的真正问题?
您的路由处理程序被多次调用的原因是因为您使用的是 app.use('/')
而不是特定的方法处理程序,例如 app.get('/')
或 app.post('/')
.
app.use()
用于添加中间件,并将匹配请求路径的 base(与使用方法处理程序相反,它将匹配 完整路径)。
换句话说,app.use('/')
将匹配 任何 尚未被之前声明的其他处理程序处理的请求。这包括对 /favicon.ico
的请求,浏览器通常在打开页面时执行这些请求。它还会将请求匹配到 /foo/bar
,例如。
可以找到有关 app.use()
的更多信息 here。