gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:11:10 25 4
gpt4 key购买 nike

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

如何在 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/

25 4 0
文章推荐: javascript - ng-click ="currentTpl='/inventory.html'"内部 ng-repeat 不工作
文章推荐: javascript - AWS S3 ajax PUT 返回 'The request signature we calculated does not match the signature you provided' ?
文章推荐: javascript - 将函数调用作为参数传递
文章推荐: javascript - 如何将加载到 中的元素样式设置为数据