“如何修复”;引用错误:未定义消息";在Node.js中
我是node.js的新手,我需要解析名为“message.txt”的文件中的请求体。当我在控制台上记录message变量时,它可以正常工作。代码很简单,首先,它创建一个服务器,然后通过post方法接收请求,然后将其保存到名为“message.txt”的文件中。我试图更改变量名,但仍然无法解决错误“如何修复”;引用错误:未定义消息";在Node.js中,node.js,Node.js,我是node.js的新手,我需要解析名为“message.txt”的文件中的请求体。当我在控制台上记录message变量时,它可以正常工作。代码很简单,首先,它创建一个服务器,然后通过post方法接收请求,然后将其保存到名为“message.txt”的文件中。我试图更改变量名,但仍然无法解决错误 consthttp=require('http'); 常数fs=要求('fs'); const server=http.createServer((req,res)=>{ const url=req.
consthttp=require('http');
常数fs=要求('fs');
const server=http.createServer((req,res)=>{
const url=req.url;
const method=req.method;
如果(url=='/')){
res.write(“”);
res.write(“输入消息”);
res.write(“提交”);
res.write(“”);
返回res.end();
}
如果(url='/message'&&method=='POST'){
常量体=[];
请求on('数据',(块)=>{
推(块);
控制台日志(正文)
});
请求开启('end',()=>{
const parsedBody=Buffer.concat(body.toString();
//log(parsedBody);
const message=parsedBody.split('=')[1];
//控制台日志(Message)
});
fs.writeFileSync('message.txt',message);
res.statusCode=302;
res.setHeader('位置','/'))
返回res.end();
}
res.setHeader('Content-Type','text/html');
res.write(“”);
res.write('我的第一页!');
res.write('hello from node js');
res.write(“”);
res.end();
});
服务器。侦听(3000)
如果
块应该是
if(url=='/message'&&method=='POST'){
const body =[];
req.on('data',(chunk)=>{
body.push(chunk);
console.log(body)
});
var message = '';
req.on('end',()=>{
const parsedBody = Buffer.concat(body).toString();
// console.log(parsedBody);
message = parsedBody.split('=')[1];
//console.log(messsage)
});
fs.writeFileSync('message.txt',message);
res.statusCode = 302;
res.setHeader('Location','/')
return res.end();
}
基本上,您的
消息
变量的范围仅限于req.on()
,因此无法在外部访问。如果块
if(url=='/message'&&method=='POST'){
const body =[];
req.on('data',(chunk)=>{
body.push(chunk);
console.log(body)
});
var message = '';
req.on('end',()=>{
const parsedBody = Buffer.concat(body).toString();
// console.log(parsedBody);
message = parsedBody.split('=')[1];
//console.log(messsage)
});
fs.writeFileSync('message.txt',message);
res.statusCode = 302;
res.setHeader('Location','/')
return res.end();
}
基本上,您的消息
变量的作用域仅限于req.on()
,因此无法在外部访问。常量变量是块作用域
在您的代码中,有以下内容:
req.on('end',()=>{
const parsedBody = Buffer.concat(body).toString();
// console.log(parsedBody);
const message = parsedBody.split('=')[1];
//console.log(messsage)
});
fs.writeFileSync('message.txt',message);
在这里,您将传递一个arrow函数作为对req.on
的第二个参数的回调
此箭头函数有自己的块范围
通过在该块范围内声明message
变量,您将无法在其外部访问它
在下一行调用fs.writeFileSync
时,您正试图这样做,访问消息
变量,该变量不在该范围内
因此,在范围内移动该行:
req.on('end',() => {
const parsedBody = Buffer.concat(body).toString();
const message = parsedBody.split('=')[1];
fs.writeFileSync('message.txt', message); // here message can be accessed
});
常量变量是块范围的
在您的代码中,有以下内容:
req.on('end',()=>{
const parsedBody = Buffer.concat(body).toString();
// console.log(parsedBody);
const message = parsedBody.split('=')[1];
//console.log(messsage)
});
fs.writeFileSync('message.txt',message);
在这里,您将传递一个arrow函数作为对req.on
的第二个参数的回调
此箭头函数有自己的块范围
通过在该块范围内声明message
变量,您将无法在其外部访问它
在下一行调用fs.writeFileSync
时,您正试图这样做,访问消息
变量,该变量不在该范围内
因此,在范围内移动该行:
req.on('end',() => {
const parsedBody = Buffer.concat(body).toString();
const message = parsedBody.split('=')[1];
fs.writeFileSync('message.txt', message); // here message can be accessed
});
您正在回调函数外使用本地定义的message
变量。即使全局定义此变量,在将变量传递到fs.writeFileSync
期间,该变量不具有NULL
值的可能性也很小
所以只需指定您的fs.writeFileSync('message.txt',message)代码>在('end',()=>{…}
在定义消息
变量的行之后。在回调函数中使用了本地定义的消息
变量。即使全局定义此变量,在将变量传递到fs.writeFileSync
期间,该变量不具有NULL
值的可能性很小
因此,只需在您定义消息
变量的行后指定您的fs.writeFileSync('message.txt',message);
使用req.on('end',()=>{…}
,这些对metnx很好,对我很好