如何在变量中存储请求的输出?

时间:2019-03-01 09:48:49

标签: node.js

我有一个简单的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?

谢谢您的时间。

2 个答案:

答案 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();

});