You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Express中为素数校验路由添加非数字输入的自定义错误消息

你当前给路由参数inputNumber加了\d+的正则限制,只有参数为纯数字时才会命中这个处理逻辑,传入字母等非数字内容时,Express找不到匹配的路由规则,会默认返回404页面,因此你要做的是适配这类非法输入的响应。

下面给出两种常用实现方案:

方案1:统一在逻辑内做参数校验(更推荐)

移除路由的参数正则限制,在代码开头先做参数合法性校验,非法输入直接返回错误提示,修改后的完整代码如下:

// 去掉参数后的正则限制
app.get('/isprime/:inputNumber', function(request, response) {
  const input = request.params.inputNumber;
  const num = parseInt(input);
  // 校验参数是否为合法正整数
  if (isNaN(num) || num < 1 || input !== num.toString()) {
    const errorHtml = `
      <h1>Prime Number Check</h1>
      <p style="color: orangered;">错误:请传入合法的正整数作为参数,示例:<code>/isprime/7</code></p>
    `;
    // 返回400状态码表示请求参数错误
    return response.status(400).send(errorHtml);
  }

  function isPrime(num) 
  {
    for(var i = 2; i < num; i++)
    if(num % i === 0) return false;
    return num > 1; 
  }

  let p;
  if(isPrime(num))
  {
    p = '<span style="color:blue;">IS a prime number.</span>';
  }
  else
  {
    p = '<span style="color:red;">IS NOT a prime number.</span>';
  }

  let html = ''; 
  html += '<h1>Prime Number Check</h1>'; 
  html += '<p>The input parameter <b> ' + num +'</b>....'+ p+ '</p>';

  response.send(html); 
});  

方案2:新增兜底路由处理非法输入

如果你不想修改现有正常数字的处理逻辑,也可以保留原有带正则限制的路由,在其后面新增一个兜底路由专门处理非数字参数的请求:

// 原有数字参数路由保持不变
app.get('/isprime/:inputNumber(\\d+)', function(request, response) {
  // 你原来的逻辑完全不变
  let num =parseInt(request.params.inputNumber);

  function isPrime(num) 
  {
  for(var i = 2; i < num; i++)
  if(num % i === 0) return false;
  return num > 1; 
  }

  if(isPrime(num))
  {
    var p = '<span style="color:blue;">IS a prime number.</span>';
  }
  else
  {
    var p = '<span style="color:red;">IS NOT a prime number.</span>';
  }

  let html = ''; 
  html += '<h1>Prime Number Check</h1>'; 
  html += '<p>The input parameter <b> ' + num +'</b>....'+ p+ '</p>';

  response.send(html); 
});

// 新增兜底路由,注意要放在原有路由之后,否则会拦截正常请求
app.get('/isprime/*', function(request, response) {
  const errorHtml = `
    <h1>Prime Number Check</h1>
    <p style="color: orangered;">错误:请传入合法的正整数作为参数,示例:<code>/isprime/7</code></p>
  `;
  response.status(400).send(errorHtml);
});

两种方案都可以实现你要的效果,当访问localhost:3000/isprime/four时就会返回对应的错误提示。


内容的提问来源于stack exchange,提问作者Koshila Dodantenna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:24:00