这43行程序旨在侦听端口514上的Syslog消息,并将消息记录到messages数据库表中。
我希望有经验的node.js开发人员提供反馈。
我才刚开始学习node.js。我在JavaScript很普通,仍然对闭包不屑一顾。我真的很难理解node.js事件驱动的编程范式。
如果我试图在sql.open回调函数之外访问SQL server连接,则会得到数据库连接已关闭的错误。
因此,由于这个原因,我不得不将接收消息保存在sql.open回调函数中的数据库逻辑中,这似乎很混乱,而且有违直觉,但这可能是因为我对事件驱动模型不太了解?
无论如何,代码都能工作(令人惊讶!)而且似乎相当有效,每秒将数十条syslog消息保存到本地MS数据库,CPU影响可忽略不计。
该代码中是否存在任何基本缺陷,以及需要对其进行任何修改以改进它?
我想我很惊讶这可以在一页代码中完成。node.js很酷..。
var dgram = require("dgram");
var server = dgram.createSocket("udp4");
var sql = require('msnodesql');
var conn_str = "Driver={SQL Server Native Client 11.0}; Server=.; Database=SYSLOG; UID=xxxxxxx; PWD=xxxxxxxx;";
// open the database connection
sql.open(conn_str, function (err, conn) {
if (err) {
console.log("error", err);
return;
}
//database connection succeeded, log a mesage into the syslog.incoming table
conn.queryRaw("insert into Incoming(Source,Message) values('LOCAL','node.js syslog server started')");
//create an event listener for when a syslog message is recieved
server.on("message", function (msg, rinfo) {
//sanitise the data by replacing single quotes with two single-quotes
var message = msg.toString().replace(/'/g, "''")
var src = rinfo.address.toString().replace(/'/g, "''")
var s = "insert into Incoming(Source,Message) values('"+src+"','"+message+"')";
//send the SQL to the database
conn.queryRaw(s, function (err, results) {
if (err) {
console.log(s);
console.log(err);
return;
}
});
}); // end of server.on("message") listener
//create an event listener to tell us that the has successfully opened the syslog port and is listening for messages
server.on("listening", function () {
var address = server.address();
console.log("server listening " + address.address + ":" + address.port);
});
//bind the server to port 514 (syslog)
server.bind(514);
});// end of sql.open()发布于 2014-12-03 17:07:31
从一次又一次:
var,要么使用分号: var message = msg.toString().replace(/'/g,“‘”) var src = rinfo.address.toString().replace(/'/g,“’”) var S=“插入传入(Source,Message)值(‘+src+’,‘+message+’)”;});// end of sql.open() <-过高注释总之,这是一个完整的剧本。
https://codereview.stackexchange.com/questions/38951
复制相似问题