Expressjs的多个可选参数触发请求处理程序两次



你好,我需要第二只眼睛,因为我不知道为什么会发生这种情况…我想创建一个请求处理程序,它可能接受0或1或2个参数,例如:http://hocalhost:3000/{seed}/{size},seedsize参数必须是可选的。

然而,下面的例子不起作用,console.log被打印了两次。如果我将处理程序路由更改为/api/:seed?/:size?,则不会发生这种情况。为什么会发生这种情况?我做错了什么?

const sharp = require('sharp');
const express = require('express');
const settings = require('./settings');
const app = express();
const calculateDensity = (s) => {
return (72 * s) / 180;
}
app.get('/:seed?/:size?', (req, res) => {

console.log('Why am I seeing this log?');
res.end();
})
app.listen(settings.PORT, () => {
console.log(`Example app listening at http://localhost:${settings.PORT}`)
})

浏览器加载后自动调用favicon.ico。加载两次对于favicon.ico和我们定义的路由

我们可以像下面代码

那样解析它
app.get('/favicon.ico', (req, res) => {
res.end()
})
app.get('/:seed?/:size', (req, res) => {
console.log(req.url)
if (req.url !== "/favicon.ico") {
console.log('Why am I seeing this log?');
}
res.end();
})

这是你的默认路由

app.get('/:seed?/:size?', (req, res) => {

console.log('Why am I seeing this log?');
res.end();
})

让我们有另一个路由

app.get('/test', (req, res) => {

console.log('Test called');
res.end();
})

现在在浏览器localhost:port/test现在哪条路由会调用。根据你的代码,它会认为你正在调用默认路由,其中你的前两个参数是可选的。

所以总是会调用默认路由。测试路线被跳过。因为test现在是default路由的参数。Not another route

深入思考测试路由工作或默认路由

相关内容

  • 没有找到相关文章

最新更新