我正在学习node.js.我有一个客户端表单,我从中发送一些数据并以某种方式在模块 makeRequest 中重构它。该模块返回一个promise,我想通过响应客户端来解析它。 所以我可能会认为我可以这样做:
let post = '';
const server = http.createServer(function (req, res) {
const readHtml = fs.createReadStream(__dirname + '/view/form.html', 'utf8');
readHtml.pipe(res);
});
server.on('request', processPost);
function processPost(request, response) {
let body = '';
if (request.method === 'POST') {
request.on('data', function (data) {
body += data;
if (body.length > 1e6) {
request.connection.destroy();
}
});
request.on('end', function () {
post = JSON.parse(body);
makeRequest(post.text)
.then(data => {
response.end(data);
})
.catch(err => {
console.log(err);
});
});
}
}
server.listen(3000, 'localhost');
这对我来说意味着只要我检索重构数据,我立即将它发送回客户端,并返回response.end(data)。 但是,如果我这样做,突然数据不会返回给客户端。如果我在request.on('end')之后写了response.end(data),它确实如此。但这是同步方式,因此当我运行这样的代码时,无论如何都不会有数据。
我能做些什么让它按照我想要的方式工作?
答案 0 :(得分:0)
如果在下面的问题讨论中说,您只想在浏览器中访问默认页面,请将其设为条件
const server = http.createServer(function(req, res) {
if ( req.method == "GET" ) {
const readHtml = fs.createReadStream(__dirname + '/view/form.html', 'utf8');
readHtml.pipe(res);
}
});
这样可以正确处理GET和POST。
我的建议是使用任何框架更有条理的方法,Express应该没问题。这样,您可以更清晰地定义不同的路由和请求类型。