平均スタックを使用し、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;
}
お手伝いください:) – jisoo
もう一度質問してください。すべてがres.redirectを処理しています。私のapp.jsファイルは です。app.use( '/ freeCodeCamp'、freeCodeProjects); が正しい場合は、これらのルートを含める必要があります。だから私は '/:short'にアクセスしていたときには本当にfreecodecamp /:短いものでした。どうすればfreecodecamp /(shortUrl.long_url)を使わずにリダイレクトすることができますか?今すぐコンソールにfreecodecamp /を置いているようです –
完全修飾URLを渡す必要があります。このURLには "http:// " res.redirect( "http://" + shortUrl.long_url)を実行してみてください – jisoo