Node.js 节点繁殖过程
无法在下面的脚本中找到问题,我想用脚本实现的是一个节点日志服务器,它将侦听Node.js 节点繁殖过程,node.js,http,express,spawn,Node.js,Http,Express,Spawn,无法在下面的脚本中找到问题,我想用脚本实现的是一个节点日志服务器,它将侦听post请求,并将日志标题和日志详细信息作为查询参数,写入文件,然后在get请求上作为json返回 问题: 有时它会不断显示加载程序,有时会给出所需的日志 注意: plz建议,如果有人有更好的解决方案,那么在日志记录过程中,生成过程是为了更新浏览器 电话留言: http://127.0.0.1:8081/log?title="test"&detail="test detail" var express = req
post
请求,并将日志标题和日志详细信息作为查询参数,写入文件,然后在get
请求上作为json返回
问题:
有时它会不断显示加载程序,有时会给出所需的日志
注意:
plz建议,如果有人有更好的解决方案,那么在日志记录过程中,生成过程是为了更新浏览器
电话留言:
http://127.0.0.1:8081/log?title="test"&detail="test detail"
var express = require("express");
var spawn = require('child_process').spawn;
var fs = require("fs");
var srv = express();
var outputFilename = '/tmp/my.json';
function getParamsObject(context) {
var params = {};
for (var propt_params in context.params) {
params[propt_params] = context.params[propt_params];
//define(params, propt_params, context.params[propt_params]);
}
for (var propt_body in context.body) {
params[propt_body] = context.body[propt_body];
//define(params, propt_body, context.body[propt_body]);
}
for (var propt_query in context.query) {
params[propt_query] = context.query[propt_query];
//define(params, propt_query, context.query[propt_query]);
}
return params;
}
srv.get("/", function(req, res) {
res.send("Hello World From Index\n");
});
srv.get("/Main", function(req, res) {
res.send("Hello World From Main\n");
});
srv.get("/ReadFile", function(req, res) {
fs.readFile("example_one.txt", function(err, data) {
if(err) throw err;
res.send(data.toString());
});
});
srv.get("/ReadFileJSON", function(req, res) {
fs.readFile("example_one.txt", function(err, data) {
if(err) throw err;
res.setHeader("content-type", "application/json");
res.send(new Parser().parse(data.toString()));
});
});
srv.post("/log", function(req, res) {
var input = getParamsObject(req);
if(input.detail) {
var myData = {
Date: (new Date()).toString(),
Title: input.title,
Detail: input.detail
}
fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
if(err) {
console.log(err);
}
});
}
res.setHeader("content-type", "application/json");
res.send({message:"Saved"});
});
srv.get("/log", function(req, res) {
var child = spawn('tail', ['-f', outputFilename]);
child.stdout.pipe(res);
res.on('end', function() {
child.kill();
});
});
srv.listen(8081);
console.log('Server running on port 8081.');
代码:
http://127.0.0.1:8081/log?title="test"&detail="test detail"
var express = require("express");
var spawn = require('child_process').spawn;
var fs = require("fs");
var srv = express();
var outputFilename = '/tmp/my.json';
function getParamsObject(context) {
var params = {};
for (var propt_params in context.params) {
params[propt_params] = context.params[propt_params];
//define(params, propt_params, context.params[propt_params]);
}
for (var propt_body in context.body) {
params[propt_body] = context.body[propt_body];
//define(params, propt_body, context.body[propt_body]);
}
for (var propt_query in context.query) {
params[propt_query] = context.query[propt_query];
//define(params, propt_query, context.query[propt_query]);
}
return params;
}
srv.get("/", function(req, res) {
res.send("Hello World From Index\n");
});
srv.get("/Main", function(req, res) {
res.send("Hello World From Main\n");
});
srv.get("/ReadFile", function(req, res) {
fs.readFile("example_one.txt", function(err, data) {
if(err) throw err;
res.send(data.toString());
});
});
srv.get("/ReadFileJSON", function(req, res) {
fs.readFile("example_one.txt", function(err, data) {
if(err) throw err;
res.setHeader("content-type", "application/json");
res.send(new Parser().parse(data.toString()));
});
});
srv.post("/log", function(req, res) {
var input = getParamsObject(req);
if(input.detail) {
var myData = {
Date: (new Date()).toString(),
Title: input.title,
Detail: input.detail
}
fs.writeFile(outputFilename, JSON.stringify(myData, null, 4), function(err) {
if(err) {
console.log(err);
}
});
}
res.setHeader("content-type", "application/json");
res.send({message:"Saved"});
});
srv.get("/log", function(req, res) {
var child = spawn('tail', ['-f', outputFilename]);
child.stdout.pipe(res);
res.on('end', function() {
child.kill();
});
});
srv.listen(8081);
console.log('Server running on port 8081.');
有两件事似乎是不必要的复杂因素,可能是你问题的根源 首先,
spawn
似乎没有必要。您似乎希望打开一个文件进行读取,并在文件中添加内容时进行更新。您可以在节点或模块中执行此操作。这可能比使用spawn()
创建子进程更健壮
其次(我认为这不太可能是问题的根源),您似乎在
POST
请求上使用了查询字符串参数。虽然不是无效的,但这是不寻常的。通常,如果您使用的是POST
方法,则可以通过POST发送数据,作为请求正文的一部分。如果使用GET
方法,数据将作为查询字符串发送。如果您不使用身体发送数据,请切换到GET
有几件事情似乎是不必要的复杂问题,这可能是问题的根源
首先,spawn
似乎没有必要。您似乎希望打开一个文件进行读取,并在文件中添加内容时进行更新。您可以在节点或模块中执行此操作。这可能比使用spawn()
创建子进程更健壮
其次(我认为这不太可能是问题的根源),您似乎在
POST
请求上使用了查询字符串参数。虽然不是无效的,但这是不寻常的。通常,如果您使用的是POST
方法,则可以通过POST发送数据,作为请求正文的一部分。如果使用GET
方法,数据将作为查询字符串发送。如果您不使用身体发送数据,请切换到GET
有几件事情似乎是不必要的复杂问题,这可能是问题的根源
首先,spawn
似乎没有必要。您似乎希望打开一个文件进行读取,并在文件中添加内容时进行更新。您可以在节点或模块中执行此操作。这可能比使用spawn()
创建子进程更健壮
其次(我认为这不太可能是问题的根源),您似乎在
POST
请求上使用了查询字符串参数。虽然不是无效的,但这是不寻常的。通常,如果您使用的是POST
方法,则可以通过POST发送数据,作为请求正文的一部分。如果使用GET
方法,数据将作为查询字符串发送。如果您不使用身体发送数据,请切换到GET
有几件事情似乎是不必要的复杂问题,这可能是问题的根源
首先,spawn
似乎没有必要。您似乎希望打开一个文件进行读取,并在文件中添加内容时进行更新。您可以在节点或模块中执行此操作。这可能比使用spawn()
创建子进程更健壮
其次(我认为这不太可能是问题的根源),您似乎在
POST
请求上使用了查询字符串参数。虽然不是无效的,但这是不寻常的。通常,如果您使用的是POST
方法,则可以通过POST发送数据,作为请求正文的一部分。如果使用GET
方法,数据将作为查询字符串发送。如果您没有使用正文发送数据,请切换到GET
以澄清问题
- 您需要将一些请求写入日志文件
- 您希望通过HTTP有效地执行日志尾部,并且当前正在通过在子进程中生成
来执行此操作tail
- 这并不是那么有效
接下来,不需要产生另一个进程来以与
tail
相同的方式读取文件。正如Trott所指出的,有一个NPM包可以完全满足您的需要:只需为行
事件设置一个事件处理程序,然后在web套接字上触发一个行
事件,这样您的JavaScript客户机就可以接收它并立即向用户显示它。为了澄清这个问题
- 您需要将一些请求写入日志文件
- 你想有效地做一个日志ta吗