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)
一个潜在的选择是编写一个中间件,它可以创建一个很好的可重用接口来满足需要的参数,如下所示:
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()。如果您不熟悉,这些链接将提供有关其工作原理的相关文档。