欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  技术分享

使用NodeJS Express和MongoDB搭建一个简单的日志服务器例子

程序员文章站 2022-03-01 14:59:20
...

介绍

在这篇文章中、我们将回顾一段NodeJS代码、并学习如何使用一些常用的模块、本文中描述的是一个简单的应用程序、应用程序会保存程序在运行的时的日志信息、包括错误信息、警告和信息等、该日志服务器中最引人注目的一点是它存储日志数据的方式、采用了一种面向文档数据库


获取源

你可以从这里获取代码 https://github.com/afshinm/NodeJS-log-server

我们将在这个应用程序中使用Mongoose和Express模块、你可以使用这两个模块简单的运行在一个小的网站或者博客!首先我将解释每个模块、然后我们再看看代码


模块

Mongoose:是通过NodeJS使用MongoDB的最好的框架、Mongo是一个开源的面向文档的NoSQL数据库系统

更多内容请见:http://blog.learnboost.com/blog/mongoose/

Express:是基于NodeJS一个Web框架、使用Express、您可以生成你的网站或应用程序的接口、并定义一个专用的路由(例如、你的博客的文章列表会/列表和详细信息页面、如 /blog/id/1)

更多内容请见:http://expressjs.com/


代码分析

让我们来看看实际的代码、首先、我们应该调用应用程序中的两个模块

var app = require(´express´).createServer(),
mongoose = require(´mongoose´),


创建一个Schema、我们需要保存它的构造函数中的变量Schema

Schema = mongoose.Schema, 


随后、我们将创建两个数组来存储应用程序的常数值

priority = [´low´, ´normal´, ´high´, ´critical´],
logtype = [´information´, ´warning´ ,´error´]; 


第一个数组为日志列表、第二个数组为日志类型、接下来就是连接到数据库、并创建相应的Schema

mongoose.connect(´mongodb://example.com/logs´);

logItem = new Schema({
    priority  : Number,
    logtype   : Number,
    datetime  : Date,
    msg       : String
});


通过以上代码、我们连接到日志数据库、并创建了我们所期望Schema、该Schema包含五个字段这是日志的优先级、日志类型、日志的创建日期和出场顺序的日志消息、接下来、我们就为大家介绍我们的模型到数据库

mongoose.model(´logItem´, logItem);


我们的模型的名字是logItem、Express写一个匿名函数

app.get(´/´, function(req, res){ 


回调方法得到了两个参数、其中第一个包含请求数据、而第二个是响应变量、使用这两个变量我们可以做一个特定的请求或响应一些东西、下面的命令将打印输出一些文字

res.send("Log saved on " + Date());


然后该应用程序的控制台上

console.log("Log saved on " + Date());


什么是的console.log

console.log是打印应用程序的文本内容到控制台(标准输出)上的简单方法、console.log和JavaScript和Firebug类似

使用console.log的唯一原因是要知道什么应用程序在运行、我们定义了一个变量,请求参数

var reqQuery = req.query;


这个变量是一个对象、它包含了所有需要的参数(如http://example.com/?foo=1&boo=2)、下一行代码会从数据库中获取这个模型

var logItem = mongoose.model(´logItem´);


为了能够插入、删除和更新数据库记录、我们要从请求参数中取出我们定义的日志类型和优先级

var pr = priority.indexOf(reqQuery["priority"]);
var type = logtype.indexOf(reqQuery["type"]);


最后、我们创建具有所需变量的一个新的模型对象

new logItem({    
    datetime: Date(),
    priority: (pr >= 0 ? pr : 0),
    logtype: (type >= 0 ? type : 0),
    msg: reqQuery["msg"]})
.save();


调用save()方法来保存对象到数据库中、我们的应用程序运行在一个端口上(例如3000)

app.listen(3000);


结果

现在运行该应用程序后我们可以把简单日志通过下列网址添加到我们的数据库http://example.com:3000/?msg=logtext&priority=high&type=errortext&priority=high&type=error