2017-07-18 95 views
0

我对使用Node.js比较新。我已经成功创建了一个应用程序,用于获取用户数据(特别是创建用户的日期)并分析每日,每周,每月和每年的用户数量。这是通过邮差成功测试的。节点应用程序连接到pugjs

我已经成功安装pugjs,并试图将计算的数据传输到帕格文件。我有一个控制器,模型和路由文件下的所有表示:

userAPIController.js

'use strict'; 

const mongoose = require('mongoose'), 
    express = require('express'), 
    app = express(), 
    moment = require('moment'), 
    pug = require('pug'), 
    User = mongoose.model('Users'), 
    compiledFunction = pug.compile('results.pug'); 

exports.list_all_users = function(req, res) { 
    User.find({}, function(err, user) { 
    if (err) 
     res.send(err); 
    res.json(user); 
    }); 
}; 

exports.create_a_user = function(req, res) { 
    var new_task = new User(req.body); 
    new_task.save(function(err, user) { 
    if (err) 
     res.send(err); 
    res.json(user); 
    }); 
}; 

exports.calculate = function(req, res) { 
    User.find({}, function(err, userArray) { //the second parameter, userArray, is an array that is returned to you. 
    if (err) 
     res.send(err); 

var daily_count = 0; 
var weekly_count = 0; 
var monthly_count = 0; 
var yearly_count = 0; 
var total_count = 0; 

for (var i = 0; i < userArray.length; i++) { 
    total_count++; 

    var timeString = userArray[i].Created_date; 
    var dayString = timeString.getUTCDate(); 
    var monthString = timeString.getUTCMonth()+1; 
    var yearString = timeString.getUTCFullYear(); 

    var todaysDate = new Date(); 
    var todaysDay = todaysDate.getUTCDate(); 
    var todaysMonth = todaysDate.getUTCMonth()+1; 
    var todaysYear = todaysDate.getUTCFullYear(); 

    // Calculating Daily Users 

    if (dayString === todaysDay && monthString === todaysMonth && yearString === todaysYear) { 
    daily_count += 1; 
    } 

    // Calculating Weekly Users 

    var weekDifference = todaysDay - dayString; 

    if (monthString === todaysMonth && yearString === todaysYear && (weekDifference >= 0 && weekDifference <= 7)) { 
    weekly_count += 1; 
    } 

    // Calculating Monthly Users 

    if (monthString === todaysMonth && yearString === todaysYear) { 
    monthly_count += 1; 
    } 

    // Calculating Yearly Users 

    if (yearString === todaysYear) { 
    yearly_count += 1; 
    } 
} 

res.json({ 
    "daily_count":daily_count, 
    "weekly_count":weekly_count, 
    "monthly_count":monthly_count, 
    "yearly_count":yearly_count, 
    "total_count":total_count 
}); 

    }); 
}; 

exports.delete_a_user = function(req, res) { 
    User.remove({ 
    _id: req.params.userId 
    }, function(err, user) { 
    if (err) 
     res.send(err); 
    res.json({ message: 'User successfully deleted' }); 
    }); 
}; 

随着userAPIModel.js,userAPIRoutes.js和server.js文件以及所有建模本教程后: https://www.codementor.io/olatundegaruba/nodejs-restful-apis-in-10-minutes-q0sgsfhbd

我也有一个与帕格文件里面的意见文件夹,我不确定如何把我的每日,每周,每月和每年的用户(如在控制器中所见)并将它们转移到帕格。我了解#{}帕格语法;但是我不确定如何获取信息。我试着要去到数据所在的控制器文件,并使用res.send功能,如:

app.get('/', function (req, res) { 
    res.send(compiledFunction({ 
     dCount: daily_count, 
     wCount: weekly_count, 
     mCount: monthly_count, 
     yCount: yearly_count, 
     tCount: total_count 
    })); 
}) 

,然后导入它从那里帕格。唯一值得关注的是,我不相信这是将控制器链接到帕格文件的正确方法,或者我正在使用正确的功能。

我究竟做错了什么?我想我会把上述内容放在控制器中,因为这是输出JSON的地方,但我习惯把它放在服务器文件中。

回答

0

我爱帕格。你可能也会。

步骤1)在您需要哈巴狗之后的某一时刻,在您开始路由之前,将帕格设置为视图引擎。

var app = express(); 
app.set('view engine', 'pug'); 

步骤2)在您的项目根目录下创建一个views文件夹并在那里写一个pug模板。 I.E. /project_root/views/home.pug

步骤3)将请求路由到您的模板。这是通过使用快速方法“渲染”来完成的。您可以将变量或函数结果附加到数据对象。在我的例子中,我实际上称它为“数据”,但只要它是JavaScript对象,您可以引用它。 键名称很重要,因为它们用于在帕格模板中引用您的数据。

app.route('/', function(req, res){ 

    res.render('home.pug', {data: someVar}); 

}); 

步骤4)在您的模板中引用您的数据。帕格允许你不只是引用,但你可以迭代它或在其上执行JavaScript。什么“home.pug”可能看起来像一个简单的例子是这样的:

doctype 
html 
    head 
    title Test Template 
    body 
    // Here it's interpolated in a string 
    h1 Take a look at my #{data} 
    // Here the inner html is being set as your variable 
    h2= data 
    // Here's an example of your data being set to a tag attribute value using ES6 template strings 
    a(href=`${data}`) Click Here 

给你的书签添加以供将来参考: https://expressjs.com/en/guide/using-template-engines.html

一定要在这里更多的阅读了关于哈巴狗: https://pugjs.org/api/getting-started.html