首页 > 解决方案 > 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}`)
})

标签: javascriptnode.jsexpress

解决方案


加载后自动调用浏览器favicon.icofavicon.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();
})

推荐阅读