2017-06-09 10 views
0

URLのスクラップを処理し、成功した場合、そのデータをMongoデータベースに保存して結果を表示するNodeJSアプリケーションにメソッドがあります。NodeJS:結果を表示するためにpugテンプレートを使用する

主な方法:

//url parameter 
 
app.get('/urls/', function(req, res) { 
 

 
    var client = new MetaInspector(req.query.url, { 
 
    timeout: 5000 
 
    }); 
 

 
    client.on("fetch", function() { 
 

 
    var imagesArray = []; 
 
    var keywordsArray = []; 
 
    var now = new Date(); 
 
    var dateVal = dateFormat(now, "mm/dd/yyyy h:MM:ss"); 
 

 

 
    for (var i = 0; i < client.images.length; i++) { 
 
     // we only want jpgs. nothing else. 
 
     if (client.images[i].indexOf('.jpg') > -1) { 
 
     imagesArray.push({ 
 
      "image": client.images[i] 
 
     }) 
 
     } 
 
    } 
 

 
    for (var i = 0; i < client.keywords.length; i++) { 
 
     keywordsArray.push({ 
 
     "keyword": client.keywords[i] 
 
     }) 
 
    } 
 

 
    var newUrls = Urls({ 
 
     url: client.url, 
 
     date_added: dateVal, 
 
     keywords: req.body.keywords, 
 
     author: client.author, 
 
     description: client.description, 
 
     ogTitle: client.ogTitle, 
 
     ogDescription: client.ogDescription, 
 
     image: client.image, 
 
     images: imagesArray, 
 
     keywords: keywordsArray 
 
    }); 
 

 
    newUrls.save(function(err) { 
 
     if (err) throw err; 
 

 
     res.send('Success' + newUrls); 
 
    }); 
 

 
    }); 
 

 
    client.on("error", function(err) { 
 
    console.log(err); 
 
    }); 
 

 
    client.fetch(); 
 

 
});

このすべてがうまくと良い作品。しかし、私はPugとExpressを使用しており、特定のルートを設定しています。私は、res.sendにobjをnewUrlsを送信するのではなく、好きなことは、特定のルートに行くと、私はすでに設定している特定のパグテンプレートに渡す必要があるだろう:

// Route.js 
 

 
var express = require('express'); 
 
var router = express.Router(); 
 
var Urls = require('../models/urlModel'); 
 
var Footer = require('../models/footerModel'); 
 

 
/* URL Saved Success Page */ 
 
router.get('/saved', function (req, res) {}); 
 
}); 
 

 
module.exports = router;

マイ位置パグファイルのビューの生活:

/views/saved.pug

div#body 
 

 
include nav.pug 
 

 
div.container.item-container 
 
    div.row 
 
    div.col-md-8 
 
     h1 Item successfully saved. 
 
     h5 {item} 
 
     h6 {description}

私はres.sendメソッドを使用しようとしましたが、動作しません。どのようにこれを処理するための任意の提案?私の理解のために

+0

'res.render()'を使用できない理由はありますか? –

+0

res.render()はデータをレンダリングしますが、ルータを使用して他のページ用に設定したテンプレートを取得します。既存のテンプレートでres.renderを使用する方法はありますか? – TWLATL

+0

私はテンプレートがすでに作成されていると言ったと思いましたが、テンプレートはどこですか?私はあなたの質問に100%明確ではありませんが、必要に応じてpug apiを使用することもできます。 –

答えて

1

は、あなたが要求をデータベースに保存されたURLの後にペイロードを/savedにリダイレクトしたい、このシナリオでは、あなたが、あなたは、クエリ文字列

newUrls.save(function(err){ 
    var payload = JSON.stringify({ 
     url: client.url, 
     date_added: dateVal, 
     keywords: req.body.keywords, 
     author: client.author, 
     description: client.description, 
     ogTitle: client.ogTitle, 
     ogDescription: client.ogDescription, 
     image: client.image, 
     images: imagesArray, 
     keywords: keywordsArray 
    }) 

    //append the payload as a query string 
    res.redirect(`/saved?payload=${payload}`) 
}) 

/savedルート内でユーザーres.redirect解析ができ可能性がありクエリと使用res.render

router.get('/saved', function (req, res) {}); 
    let payload = JSON.parse(req.query.payload); 
    if(payload){ 
     res.render('saved', payload) 
    } 
}); 
+0

ありがとう!これは機能します。ペイロードはURLパラメータ経由で配信する必要がありますか、別の方法で渡すことはできますか?私はペイロードに多くのデータを持っており、よりクリーンな方法でルートに渡すことができるなら、よりクリーンなものになります。 – TWLATL

+0

'res.redirect'はコンテキストデータのリダイレクトをサポートしていません。クエリ文字列は私が見つけることができる唯一の方法です。なぜあなたは 'res.render( 'saved')'を '/ urls'の中で直接呼び出さないのですか? – MarkoCen

+0

Pugからサイトテンプレートを使用するページが欲しいです。 res.renderにpugテンプレートを適用する別の方法はありますか? – TWLATL

関連する問題