Node.js 如何将请求的输出存储在变量上?

Node.js 如何将请求的输出存储在变量上?,node.js,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) =>

我有一个简单的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>, () => {
});
consthttp=require('http');
const app=new http.Server();
var消息='m1';
常量选项={
方法:“GET”,
主机名:“”,
端口:
};
应用于('请求',(rq,rs)=>{
const m2req=http.request(选项,(res)=>{
res.on('数据',(d)=>{
消息=d;
process.stdout.write(message);//这将打印m2,这是正确的
})
})
m2req.on('错误',(错误)=>{
控制台错误(错误)
})
m2req.end();
rs.writeHead(200,{'Content-Type':'text/plain'});
rs.write(message);//这应该打印'm2',但打印'm1'
rs.end('\n');
});
app.listen(,()=>{
});
我的服务器打印m2而不是m1的正确方法是什么


谢谢您的时间。

在您的代码中,您正在请求另一个服务,这是一个异步操作。因此变量
message
仍然是“m1”,因为在服务返回值之前,
res.write(message)
执行,所以它仍然是“m1”。您应该将
res.send()
res.write()
res.writeHead
写入
res.on

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

        rs.writeHead(200, { 'Content-Type': 'text/plain' });
        rs.write(message);// this should print 'm2' but prints 'm1'
        rs.end('\n');
      })
    })

    m2req.on('error', (error) => {
      console.error(error)
    })
    m2req.end();



});

app.listen(<some_port>, () => {
});
consthttp=require('http');
const app=new http.Server();
var消息='m1';
常量选项={
方法:“GET”,
主机名:“”,
端口:
};
应用于('请求',(rq,rs)=>{
const m2req=http.request(选项,(res)=>{
res.on('数据',(d)=>{
消息=d;
process.stdout.write(message);//这将打印m2,这是正确的
rs.writeHead(200,{'Content-Type':'text/plain'});
rs.write(message);//这应该打印'm2',但打印'm1'
rs.end('\n');
})
})
m2req.on('错误',(错误)=>{
控制台错误(错误)
})
m2req.end();
});
app.listen(,()=>{
});

在您的代码中,您正在请求另一个服务,这是一个异步操作。因此变量
message
仍然是“m1”,因为在服务返回值之前,
res.write(message)
执行,所以它仍然是“m1”。您应该将
res.send()
res.write()
res.writeHead
写入
res.on

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

        rs.writeHead(200, { 'Content-Type': 'text/plain' });
        rs.write(message);// this should print 'm2' but prints 'm1'
        rs.end('\n');
      })
    })

    m2req.on('error', (error) => {
      console.error(error)
    })
    m2req.end();



});

app.listen(<some_port>, () => {
});
consthttp=require('http');
const app=new http.Server();
var消息='m1';
常量选项={
方法:“GET”,
主机名:“”,
端口:
};
应用于('请求',(rq,rs)=>{
const m2req=http.request(选项,(res)=>{
res.on('数据',(d)=>{
消息=d;
process.stdout.write(message);//这将打印m2,这是正确的
rs.writeHead(200,{'Content-Type':'text/plain'});
rs.write(message);//这应该打印'm2',但打印'm1'
rs.end('\n');
})
})
m2req.on('错误',(错误)=>{
控制台错误(错误)
})
m2req.end();
});
app.listen(,()=>{
});

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

});

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

});

试着把你所有的
rs.writeHead
rs.write
rs.end
代码放在你的
res.on
回调中,如果你知道
m2
是正确的,试着把你所有的
rs.writeHead
rs.end
代码放在
res.on
回调中,您知道
m2
是正确的