javascript - Expressjs 多个可选参数触发请求处理程序两次
问题描述
您好,我需要第二双眼睛,因为我不确定为什么会发生这种情况...我想创建 1 个请求处理程序,它可能接受 0 或 1 或 2 个参数,例如:http://hocalhost:3000/{seed}/{size}
,seed
并且size
参数必须是可选的。
但是,下面的示例不起作用,并且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();
})
推荐阅读
- mongodb - 如何对数组内的 JSONS 进行正则表达式查询
- python - 如何在 Tkinter 中返回当前关注的条目的长度?(以退格键为重点的条目)
- python - 为什么 elasticsearch python parallel_bulk 使用这么多内存?
- spring-boot - 如何让日志文件删除与 spring-boot-starter-log4j2 一起使用?
- java - 安卓无法删除文件
- java - Maven Archetypes 上的速度反射:从 Json 获取数据
- asp.net-core - ASP.Core ODataControllers 无法识别“按键获取”操作
- html - 将特定属性传递给选定的子级
- html - 垂直对齐表格中的图像
- sql - 使用 windows 函数 + 分区计算 2 列的百分比