2017-07-18 14 views
0

Node.jsの使用は比較的新しいです。私は、ユーザーデータ(具体的には、ユーザーが作成された日付)を取得し、毎日、毎週、毎月、毎年のユーザーの量を吐き出すアプリケーションを作成しました。これはPostman経由で正常にテストされました。pugjsに接続するノードアプリケーション

pugjを正常にインストールしました。計算されたデータをpugファイルに転送しようとしています。 userAPIModel.js、同様userAPIRoutes.jsとserver.jsファイル、すべてこのチュートリアルの後にモデル化して

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' }); 
    }); 
}; 

:私は、コントローラ、モデルとルートファイルすべて以下に示すがあります。 https://www.codementor.io/olatundegaruba/nodejs-restful-apis-in-10-minutes-q0sgsfhbd

また、pugファイルが入ったviewsフォルダもあります。コントローラに表示されているように毎日、毎週、毎月、毎年のユーザーを受け取り、pugに転送する方法が不明です。私は#{}のpug構文を理解しています。しかし、私はどのように情報を取得するかについてはわかりません。

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

そしてそこからパグにそれをインポートする:私はデータがあり、そのようにres.send機能を使用しているコントローラファイルに行く試みました。唯一の懸案事項は、私はこれがコントローラをpugファイルにリンクする正しい方法であるとは思わないか、正しい機能を使用しているということです。

私は間違って何をしていますか? JSONが出力されている場所であるので、コントローラに上記を入れておきたいと思っていますが、これをサーバーファイルに置くことに慣れています。

答えて

0

私はpugが大好きです。あなたもそうでしょう。

ステップ1)pugを必要とした後、ルーティングを開始する前に、pugをビューエンジンとして設定します。

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

手順2)プロジェクトルートにviewsフォルダを作成し、その中にpugテンプレートを作成します。 I. /project_root/views/home.pug

手順3)テンプレートにリクエストをルーティングします。これは、expressメソッド "render"を使用して行います。変数または関数結果をデータオブジェクトに添付することができます。私の例では、文字通りそれを「データ」と呼んでいますが、JavaScriptのオブジェクトである限り、それを参照することはできます。 キー名は、pugテンプレートのデータを参照するために使用されるので、重要です。

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

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

}); 

手順4)テンプレート内のデータを参照してください。 Pugは参照だけでなく、繰り返したり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

関連する問題