代码之家  ›  专栏  ›  技术社区  ›  Pankaj

路由文件中的函数调用-node.js节点

  •  0
  • Pankaj  · 技术社区  · 7 年前

    下面的代码不工作,因为有函数调用。

    function checkQueryStringExists(request) {
        var url_parts = url.parse(request.url, true);
        var api_token = url_parts.query.api_token;
        if(typeof api_token === 'undefined') {
            return false;
        }
        return true;
    }
    
    router.post("/get-profile", function(request, response) {
        response.setHeader('Content-Type', 'application/json');
    
        var result = checkQueryStringExists(request);
        if(!result) {
            response.status(401).send(JSON.stringify({ "Status": false, "Message": "Invalid query string." }));
        }
    });
    

    下面的代码可以工作,因为函数调用已被删除

    router.post("/get-profile", function(request, response) {
        response.setHeader('Content-Type', 'application/json');
    
        var url_parts = url.parse(request.url, true);
        var api_token = url_parts.query.api_token;
        if(typeof api_token === 'undefined') {
            response.status(401).send(JSON.stringify({ "Status": false, "Message": "Invalid query string." }));
        }
    
    });
    

    这是否意味着我们不能在node.js节点像上面那样?

    3 回复  |  直到 7 年前
        1
  •  0
  •   Sashi    7 年前

    您绝对可以在NodeJS中使用函数。尽管使用函数的最佳方法是使用async/await,这样您就可以确保函数在处理代码之前实际返回。

    checkQueryStringExists(request) {
        return new Promise(async (resolve, reject) => {
            var url_parts = url.parse(request.url, true);
            var api_token = url_parts.query.api_token;
            if(typeof api_token === 'undefined') {
                resolve(false);
            }
            resolve(true);
        }
    });
    
    router.post("/get-profile", async function(request, response) {
        response.setHeader('Content-Type', 'application/json');
        try{
            var result = await checkQueryStringExists(request);
            if(!result) {
                response.status(401).send(JSON.stringify({ "Status": false, "Message": "Invalid query string." }));
            } catch (e){
              console.log(e)
        }
    });
    
        2
  •  0
  •   Himanshu sharma    7 年前

    Node.js节点是异步编程,它不像c++或其他语言中的代码一个接一个地运行,必须编写回调或promise或async/await才能同步运行它。

    我用的是回拨,你可以用同样的方式答应我。:) 让我知道你想要任何解释。

      function checkQueryStringExists(request, callback) {
            var url_parts = url.parse(request.url, true);
            var api_token = url_parts.query.api_token;
            if(typeof api_token === 'undefined') {
                return callback(false);
            }
            return callback(true);
        }
    
        router.post("/get-profile", function(request, response) {
            response.setHeader('Content-Type', 'application/json');
    
            checkQueryStringExists(request,function(status){
                     if(!status) {
                          response.status(401).send(JSON.stringify({ "Status": false, "Message":"Invalid query string." }));
                        }else{
                          response.status(200).send(JSON.stringify({ "Status": true, "Message":"query string is ok." }));
                        }
    
              });
    
        });
    
        3
  •  0
  •   Pankaj    7 年前

    在node js中,可以定义函数而不指定函数关键字。可以使用两种方法定义函数:

    方法1

    checkQueryStringExists(request) {
        var url_parts = url.parse(request.url, true);
        var api_token = url_parts.query.api_token;
        if(typeof api_token === 'undefined') {
            return false;
        }
        return true;
    }
    

    方法2

    checkQueryStringExists = (request) => {
        var url_parts = url.parse(request.url, true);
        var api_token = url_parts.query.api_token;
        if(typeof api_token === 'undefined') {
            return false;
        }
        return true;
    }
    

    前卫

    推荐文章