快递路线,检查 req.params 参数是否为空

EDk*_*zen 1 javascript node.js express

我是 node 和 express 的新手,我将不胜感激。我正在尝试编写一个 get 请求,该请求检查 req.params.address_line 是否为空,如果是,则执行某些操作,但似乎无法弄清楚如何执行此操作。到目前为止,我已经尝试过这个:

app.get('/smth/smth_else/:address_line', function(req, res){
  if(req.params.address_line===""){
    res.send("Hello World.")
  }
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用,所以我认为这是不正确的。如何检查 address_line 是否为空?我在谷歌上广泛搜索,但找不到可行的解决方案。谢谢!

小智 5

您必须首先检查整个 req.params 是否存在

像这样

app.get('/smth/smth_else/:address_line', function(req, res){

  if(!req.params)
    return res.send("NO PARAMS PASSED")

  if(!req.params.address_line)
    return res.send("NO address_line PASSED")

  if(req.params.address_line === ""){
    res.send("ADDRESS LINE EMPTY.")
  } else {
    res.send("ADDRESS LINE > ",req.params.address_line)
  }
}
Run Code Online (Sandbox Code Playgroud)


dil*_*lon 5

一个潜在的选择是编写一个中间件,它可以创建一个很好的可重用接口来满足需要的参数,如下所示:

const requireParams = params => (req, res, next) => {
    const reqParamList = Object.keys(req.params);
    const hasAllRequiredParams = params.every(param =>
        reqParamList.includes(param)
    );
    if (!hasAllRequiredParams)
        return res
            .status(400)
            .send(
                `The following parameters are all required for this route: ${params.join(", ")}`
            );

    next();
};

app.get("/some-route", requireParams(["address_line", "zipcode"]), (req, res) => {
    const { address_line, zipcode } = req.params;
    if (address_line === "") return res.status(400).send("`address_line` must not be an empty string");


    // continue your normal request processing...
});

Run Code Online (Sandbox Code Playgroud)

此示例使用Express 中间件Array.prototype.every()。如果您不熟悉,这些链接将提供有关其工作原理的相关文档。