Node.js 如何将请求的输出存储在变量上?
我有一个简单的http服务器,它根据另一个请求返回的消息返回消息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) =>
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
是正确的