完成中间件文件,以使所有查询参数均得到验证,并且null和undefined值会引发错误消息

时间:2019-05-28 15:45:25

标签: node.js express

同时传递名称和年龄参数时输出


创建api的问题陈述: 在给定的应用程序中完成中间件文件和index.js文件,以便验证路由所需的所有查询参数,并且null和undefined值会引发错误消息- 必填的查询参数是-name:String,age:Number

创建一个名为“ / query”的路由,并在请求该路由时如上所述发送响应。 根据我的说法,api应该包括这些条件以获得所需的输出,它们是:

1。当同时存在两个查询参数时,响应成功(状态:200)

2。输入年龄查询参数且名称参数为空时,响应失败(状态:403)

3。输入姓名查询参数且年龄参数为空时,响应失败(状态:403)

http://localhost:3000/query/?age=2&name”的查询参数之一为空时

    the output i get is this: 
    {
     "error": false,
     "status": 200,
     "userMessage": "all parameters entered",
     "data": {
     "name": "",
     "age": "2"
    }
    }

,但预期输出应具有           错误:是的,           状态:403 这是iam面临的错误。

有两个文件。一个是index.js文件,另一个是checkQueryParameters.js文件。(这是一个中间件)

index.js代码

const express = require('express');
const app = express();
const middleware = require('./middleware/checkQueryParameter');

app.get('/query',middleware.checkQueryParameters,(req,res)=>{
res.end();
});
app.listen(3000,()=>console.log('Example app listening on point 
3000'));
module.exports = app;

checkQueryParameters.js代码

let checkQueryParameters = (req,res,next)=>{
  let name = req.query.name;
  let age = req.query.age;
  console.log(typeof(age));
  console.log(typeof(name))
  console.log(age);
  console.log(name);

  if(typeof name == undefined || name == null){
  let result ={
      error : true,
      status : 403,
      userMessage : 'some parameters missing',
      data : 'name'
      }
      res.send(result);
     }
     else if(typeof age == undefined || age == null){
     let result ={
         error : true,
         status : 403,
         userMessage : 'all parameters missing',
         data : 'age'
        }
        res.send(result);

     }
     else{
         let result ={
         error : false,
         status : 200,
         userMessage : 'all parameters entered',
         data :{
                 'name' : name,
                  'age' : age
               }
        }
      res.send(result);

     }
    }

   module.exports = {
      checkQueryParameters:checkQueryParameters
   }

1 个答案:

答案 0 :(得分:0)

我认为您的问题是一个空字符串情况。
对于?age=2&name,如果您console.log(req.query.name);,您可能会看到name不是null,不是undefined。它是一个空字符串''。如果要将该情况检查为错误,也应该检查一个空字符串。

if(typeof name == undefined || name == null || name === ''){
...

if(typeof age == undefined || age == null || age === ''){
....

关于中间件逻辑其余部分的一点。在if else块中,您检查年龄参数,并发送一条消息“缺少所有参数”。那是错的。 name并不缺少,执行年龄验证这一事实意味着您的第一个if块没有执行,因此name参数非常有效。您应该这样处理:

if(typeof name == undefined || name == null || name === ''){
    let result = {
        error : true,
        status : 403,
        userMessage : 'name parameter is missing',
        data : 'name'
    }
    ...
} else if(typeof age == undefined || age == null || age === ''){
    let result = {
        error : true,
        status : 403,
        userMessage : 'age parameter is missing',
        data : 'age'
    }
    ...
}
else {
...
}