代码之家  ›  专栏  ›  技术社区  ›  ashish singh

如何在快速处理程序中允许传递?

  •  -2
  • ashish singh  · 技术社区  · 8 年前

    POST 比如说,api端点 /users 获取用户列表。

    它是 岗位 GET 请求。

    假设用户主体 有一把钥匙叫 age

    现在在快车上我有这样的路线

    app.post('/users', function(r,res){
      // function body
    })
    

    我不能把任何代码放在函数体中

    所以我可以通过使用一个 /用户 把它放在原始处理程序之前,但显然它会截取所有 /用户 请求和中断早期功能

    如何只截取具有特定年龄段的请求,然后将其他请求传递给原始处理程序,以便原始功能继续工作?

    我想知道如何使用路由处理程序而不是中间件来实现这一点?

    我也不能搞乱url或请求主体

    2 回复  |  直到 8 年前
        1
  •  1
  •   jfriend00    8 年前

    首先,这听起来是一个非常糟糕的设计,所以解决问题的更好方法是修复URL设计,这样您就不会在可以修改和不能修改的代码之间产生这种冲突。我这么说是因为听起来你是想“侵入”某个东西,而不是做一个适当的设计。

    如果您的代码使用的是常规的主体解析器中间件,那么post的主体将已经被解析并且 req.body . 因此,您可以在 req.body.age 检查它的价值。

    next() 继续处理其他请求处理程序。

    // make sure this is defined BEFORE other /users request handlers
    app.post('/users', function(req, res, next) {
        // test some condition here
        if (+req.body.age > 30) {
            // process the request and send a response
            res.send("You're too old");
        } else {
            // continue processing to other request handlers
            next();
        }
    })
    
        2
  •  0
  •   David White    8 年前

    我处理这个问题的方法是,如果我有一条可行的路线,我需要其他东西,我添加另一条类似的路线。这样你就不用管原件了——它提供了一个有效的服务。这就是我想你所描述的。

    你可以随意调用路由。如果需要用户列表,可以传递如下变量:

      $.get('/contactCard/'+qry);
    
      app.get('/contactCard/:sort', function(req, res) {
           var cId = req.params.sort;
           console.log('cId: ' + cId);
    

    然后设置搜索查询并获取数据,如下所示:

         let params = {
                    TableName: ddbTable,
                    ProjectionExpression : "cEmail,Forename,Surname",
                    KeyConditionExpression: "ID = :e ",
                    ExpressionAttributeValues: {
                        ":e" : cId
                    }
                };
         console.log("params", JSON.stringify(params, null, 2));
         docClient.query(params, function(err, data) {
    

    然后检查错误或成功:

                    if (err) {
                        console.log("Error:", JSON.stringify(err, null, 2));
                    } else {
                        console.log("Success", JSON.stringify(data, null, 2));
                        let contacts = data;
    

    然后在这里呈现到所需的页面,并根据需要传递数据。

                        res.render('members/contactcard', {  
                                    contacts:contacts,
                                    static_path: '/static'
                        });
                    }
                });