我有一个简单的http服务器,它根据另一个请求返回的消息返回一条消息。
const http = require('http');
const app = new http.Server();
var message = 'm1';
const options = {
method: 'GET',
hostname: '<some-hostname>',
port: <some_port>
};
app.on('request', (rq, rs) => {
const m2req = http.request(options, (res) => {
res.on('data', (d) => {
message = d;
process.stdout.write(message);//this prints m2, which is correct
})
})
m2req.on('error', (error) => {
console.error(error)
})
m2req.end();
rs.writeHead(200, { 'Content-Type': 'text/plain' });
rs.write(message);// this should print 'm2' but prints 'm1'
rs.end('\n');
});
app.listen(<some_port>, () => {
});
什么是正确的方法,以便我的服务器打印m2而不是m1?
谢谢您的时间。
答案 0 :(得分:1)
在您的代码中,您正在请求另一项服务,这是异步操作。因此变量src="stream.wav"
仍然是“ m1”,因为在服务返回您的message
执行的值之前,它仍然是“ m1”。您应该在res.write(message)
res.send()
res.write()
res.writeHead
res.on
答案 1 :(得分:1)
Nodejs是异步的,您必须在下面这样使用
app.on('request', (rq, rs) => {
const m2req = http.request(options, (res) => {
var data = []
res.on("data", (d) => { data.push(d) })
res.on('end', () => {
rs.writeHead(200, { 'Content-Type': 'text/plain' });
rs.write(Buffer.concat(data).toString());// this should print 'm2' but prints 'm1'
rs.end('\n');
})
})
m2req.on('error', (error) => {
console.error(error)
})
m2req.end();
});