2016-08-28 4 views
0

平均スタックを使用し、URL短縮を構築しようとしています。私はreq.params.UserUrlのチェックを受け、それが有効なURLであることを確認して、短いルートとして使用したい乱数を作成するモジュールを持っています。私は乱数を保存する方法を見つけることができないので、次のURLリクエストを確認することはできません。 Google検索の後、long_urlとshort_url:randomNumberを使ってオブジェクトをデータベースに保存するのが最も効果的な方法だったようです。私のコードではエラーは発生しませんが、私のherokuデータベースをチェックすると、新しいエントリがありますが、_idと__vだけがあるので、mLabsが生成します。誰かが私がどこに間違っているか教えてくれますか?Mongoose.create私のデータはなく文書を作成しています

ルート

var express = require('express'); 
var router = express.Router(); 
var mongoose = require('mongoose'); 
var URLShortener = require(process.cwd()+'/public/Modules/urlShortener.module.js'); 
var ShortURL = require('../models/shortUrl.js'); 

router.get('/', function(req, res) { 
    res.render('index', { title: 'FreeCodeCamp Projects' }); 
}); 


router.get('/urlShortener', function(req, res){ 
    res.render('freecodecamp/urlShortener', { title: 'Url Shortener Site'}); 
}); 

router.get('/urlShortener/:userUrl', function(req, res){ 
    if(URLShortener.checkValidUrl(req.params.userUrl)) 
    { 
     var UserUrl = req.params.userUrl; 
     var randNbr = URLShortener.assignRanNbr(); 
     ShortURL.create(URLShortener.createUrlObj(UserUrl, randNbr), function (err, smallUrl) { 
    if (err) return console.log(err); 
    else res.json(smallUrl); 
    }); 
    } 
else 
    { 
    res.send('Invalid url'); 
    } 
}); 

router.get('/:short', function(req, res){ 
    if(randNbr == req.params.short) 
    { 
     res.redirect(userUrl); 
    } 
    else 
    { 
     res.send('Not the correct shortcut'); 
    } 
}); 

module.exports = router; 

のURLスキーマ

var mongoose = require('mongoose') 
var Schema = mongoose.Schema 

var shortUrlSchema = new Schema({ 
    long_id:String, 
    short_id:Number 
}, {collection: 'shortUrl'}); 

module.exports = mongoose.model('shortUrl', shortUrlSchema); 

urlShortenerモジュール

'use strict' 

module.exports.checkValidUrl = function(url){ 
var pattern = new RegExp(/((([A-Za-z]{3,9}:(?:\/\/)?)(?:[-;:&=\+\$,\w][email protected])?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w][email protected])[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)/); 
return pattern.test(url); 
} 

module.exports.assignRanNbr = function(){ 
    var randNbr = Math.floor(Math.random() * (9999 - 1 + 1)) + 1; 
    return randNbr; 
} 

module.exports.createUrlObj = function(url, num){ 
    var urlObj = {}; 
    urlObj.original_url = url; 
    urlObj.short_url = 'https://rawlejuglal-me-rawlejuglal-1.c9users.io/freecodecamp/'+num; 
    return urlObj; 
} 

答えて

1
あなたcreateUrlObj方法は、プロパティ original_urlshort_urlを持つオブジェクトを返している

が、あなたのshortUrlSchema性質があるファイルlong_idおよびshort_id。 createメソッドのプロパティ名は、スキーマと一致する必要があります。プロパティの値の型もスキーマの型と一致する必要があります(現在short_urlは文字列、short_idは数字です)。私はあなたのcreateUrlObj方法が

var shortUrlSchema = new mongoose.Schema({ 
    long_url: String, 
    short_id: Number 
}, {collection: 'shortUrl'}); 

する

module.exports.createUrlObj = function(url, num){ 
    var urlObj = {}; 
    urlObj.long_url = url; 
    urlObj.short_id = num; 
    return urlObj; 
} 

とスキーマであるために何が本当にしたいことはまた、あなたの'/:short'ルートがrandNbruserUrl変数ので、データベースへの呼び出しを持つべきだと思いますそのルートには定義されていません。

router.get('/:short', function(req, res){ 
    ShortUrl.findOne({short_id: req.params.short}, function(err, shortUrl){ 
     if(err) res.send('Invalid Url'); 
     res.redirect(shortUrl.long_url) 
    }) 
}); 
+0

お手伝いください:) – jisoo

+0

もう一度質問してください。すべてがres.redirectを処理しています。私のapp.jsファイルは です。app.use( '/ freeCodeCamp'、freeCodeProjects); が正しい場合は、これらのルートを含める必要があります。だから私は '/:short'にアクセスしていたときには本当にfreecodecamp /:短いものでした。どうすればfreecodecamp /(shortUrl.long_url)を使わずにリダイレクトすることができますか?今すぐコンソールにfreecodecamp /を置いているようです –

+0

完全修飾URLを渡す必要があります。このURLには "http:// " res.redirect( "http://" + shortUrl.long_url)を実行してみてください – jisoo

関連する問題