65.9K
CodeProject 正在变化。 阅读更多。
Home

一个使用 express, nodejs 和 mongodb 的简单日志服务器

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.75/5 (10投票s)

2012年3月30日

CPOL

3分钟阅读

viewsIcon

40302

在本文中,我们将回顾一段 NodeJS 代码,并学习如何使用一些常见的模块。 这是一个简单的应用程序,用于记录日志,包括错误、警告和信息。

介绍 

在本文中,我们将回顾一段 NodeJS 代码,并学习如何使用一些常见的模块。 这是一个简单的应用程序,用于记录日志,包括错误、警告和信息。

关于这个日志服务器,最值得注意的一点是它存储日志数据的方式,它使用一种类似面向文档的数据库。

获取源代码

您可以在这里获取代码:https://github.com/afshinm/nodejs-log-server

我们将在本应用程序中使用 Mongoose 和 Express 模块。 您可以使用这两个模块简单地运行一个小型网站或网络日志! 我将首先解释每个模块,然后我们再来看代码。

模块  

Mongoose:它是使用 mongodb 通过 nodejs 的最佳现有库之一。 Mongo 是一个开源的、面向文档的 NoSQL 数据库系统

在以下网址阅读更多信息:http://blog.learnboost.com/blog/mongoose/

Express:是 nodejs 的一个 web 框架。 使用 Express,您可以生成您的网站或应用程序的界面,并为它们中的每一个定义一个专用的路由(例如,您的网络日志的文章列表将是 /list 并且每篇文章的详细信息页面将类似 /blog/id/1)。

在以下网址阅读更多信息:https://express.js.cn/

开始吧

让我们看看实际的代码。 首先,我们应该在应用程序中调用这两个模块

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

为了轻松创建模式,我们需要将其构造函数存储在 Schema 变量中

Schema = mongoose.Schema, 

然后,我们将创建两个数组来存储应用程序的常量值
priority = ['low', 'normal', 'high', 'critical'],
logtype = ['information', 'warning' ,'error']; 

第一个数组是日志的可能优先级列表,第二个数组是日志类型。 现在是时候连接到数据库并创建相应的模式了
mongoose.connect('mongodb://example.com/logs');

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

正如您所看到的,我们已连接到日志数据库并创建了我们想要的模式。 此模式包含五个字段,分别是日志优先级、日志类型、日志创建日期和日志消息,按出现的顺序排列。 之后,在下一行,我们将向数据库介绍我们的模型
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 是一种简单的方法,用于在应用程序控制台 (stdout) 上打印一些文本。 console.log 接受一个参数,即要在屏幕上打印的所需文本。 console.log 在 JavaScript 和 Firebug 中做了类似的事情。 例如,如果我们使用 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); 

结果

现在,在运行该应用程序后,我们可以使用以下 URL 简单地向我们的数据库添加一个日志
http://example.com:3000/?msg=logtext&priority=high&type=errortext&priority=high&type=error

特别感谢我的亲爱的朋友,Fardin Koochaki 翻译了这篇文章。

© . All rights reserved.