javascript - 从 grunt-contrib-connect 请求对象获取数据

标签 javascript gruntjs grunt-contrib-connect

所以这可能是一个非常简单的问题,但我已经在谷歌上搜索了一个多小时,但没有找到任何东西。我也只是尝试打印出请求对象,但没有看到任何有用的信息。

如何在 grunt-contrib-connect 中间件定义中获取客户端请求的数据或正文?

connect: {
  main: {
    options: {
      hostname: "0.0.0.0",
      port: 8080,
      /**
       *  These are the mocked out backends for various endpoints
       */
      middleware: function(connect, options, middlewares) {
        middlewares.unshift(function(req, res, next) {
          if (req.url !== '/v1/accounts/_findEmail') {
            return next();
          }

          // ********
          // How do I get the data content of the request?
          var data = req.data; // Is undefined
          // ********

          if (data && data.email === 'taken@email.com') {
            res.writeHead(200, {"Content-Type": "application/json"});
            res.write(JSON.stringify({email:"found"}));
          } else {
            res.writeHead(404, {"Content-Type": "application/json"});
            res.write(JSON.stringify({email:"not found"}));
          }

          res.end();
        });

        return middlewares;
      }

    }
  }
}

最佳答案

事实证明,要完成这项工作需要做几件事。

如前所述here , connect 在这种情况下基本上只是包装 NodeJS,我应该猜到了。所以那个请求对象实际上是http.ServerRequest , 用法相同。

所以代替 var data = req.data; 我可以添加一个回调,比如 req.on('data', function (data) {//do stuff }); 并以这种方式查看数据。

除此之外,在我读取数据之前,我必须添加 req.setEncoding('utf8'); 以便它以字符串而不是十六进制数组的形式出现。

所以最终的解决方案是这样的:

connect: {
  main: {
    options: {
      hostname: "0.0.0.0",
      port: 8080,
      /**
       *  These are the mocked out backends for various endpoints
       */
      middleware: function(connect, options, middlewares) {
        middlewares.unshift(function(req, res, next) {
          if (req.url !== '/v1/accounts/_findEmail') {
            return next();
          }

          req.setEncoding('utf8');
          req.on('data', function (rawData) {
            var data = JSON.parse(rawData);

            if (data && data.email && data.email === 'taken@email.com') {
              res.writeHead(200, {"Content-Type": "application/json"});
              res.write(JSON.stringify({email:"found"}));
            } else {
              res.writeHead(404, {"Content-Type": "application/json"});
              res.write(JSON.stringify({email:"not found"}));
            }

            res.end();
          });
        });

        return middlewares;
      }

    }
  }
}

关于javascript - 从 grunt-contrib-connect 请求对象获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26979016/

相关文章:

gruntjs - 咕噜声连接 : serve files with base url added

javascript - 在滚动问题上向下滑动菜单

javascript - 为什么不能使用 splice() 将子字符串插入数组?

angularjs - Yeoman 的 Angular.js Codelab - 修复测试

node.js - 在 grunt-contrib-connect 中打开任务,在 appName 参数中指定浏览器模式和文档模式

gruntjs - 设置 grunt 来启动和实时重新加载浏览器(使用最少的插件)

javascript - AngularJS 类型错误 : Cannot call method 'apply' of undefined

javascript - 在 ES6 synthax 中,如何使用变量键进行命名导出?

gruntjs - 是否可以在监视任务之后运行任务?

node.js - 我对 Gruntjs 目标做错了什么?