当我把请求发送到localhost:3000/product时,工作得很顺利;但发送到localhost:3000时却不起作用。

前端开发 2026-07-07

当我把请求发送到 localhost:3000/product 时,工作完全正常,但当我请求 localhost:3000 时,却不起作用。

下面是代码:

import express from 'express'; 

const app = express();  
const PORT = 3000; 

app.use(express.json());   
app.use(express.urlencoded({ extended: false })); 

app.get('/*path', async (req, res) => { 
    let url;   
    const origin = '`[`dummyjson.com`](https://dummyjson.com)`';

    const path = req.params.path;

    if (path) { 
        url = new URL(path, origin);
    } else {   
        url = new URL(origin); 
    }  

    console.log(url); 
    console.log(req.params.path);

    const response = await fetch(url); 
    const data = await response.json();

    console.log(data);

    res.status(200).json(data); 
}); 

app.listen(PORT, () => {   
    console.log(`Server is listening on ${PORT}\`);   
});

解决方案

1.无效的基础URL

URL构造函数需要一个像 'https://dummyjson.com' 这样的绝对协议,否则JavaScript会抛出一个TypeError: Invalid URL的错误信息。

现在回到我们的问题

路径匹配 /*path。Express捕获 product,并将其赋值为:req.params.path = "product"。因此它工作。

你正在访问根目录 /。斜杠后没有任何内容,因此Express会将其赋值为空字符串:req.params.path = ""

代码进入 else 区块并运行 new URL('dummyjson.com')

在单独解析基础域名时。因为 https:// 缺失,JavaScript会抛出一个静默的 TypeError: Invalid URL 错误。

URL 构造函数严格要求一个有效的协议(如 https://

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章