簡體   English   中英

Mongoose.create創建文檔,但沒有我的數據

[英]Mongoose.create creating document but none of my data

我正在學習使用均值堆棧並嘗試構建url縮短器。 我有一個接受req.params.UserUrl的模塊,並確保它是有效的url,然后創建一個我想用作短路徑的隨機數。 我似乎找不到一種保存隨機數的方法,以便可以針對它檢查下一個url請求。 在Google搜索之后,似乎最有效的方法是使用long_url和short_url:randomNumber將對象保存在數據庫中。 我的代碼沒有引發任何錯誤,但是當我檢查heroku數據庫時,它有一個新條目,但是只有mLabs生成的_id和__v。 有人可以告訴我我要去哪里了。

路由文件

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;

網址架構

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]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[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;
}

您的createUrlObj方法返回的對象的屬性為original_urlshort_url ,但您的shortUrlSchema屬性為long_idshort_id create方法中的屬性名稱需要與您的架構匹配。 屬性值類型還必須與您的架構類型匹配(當前, short_url是字符串, short_id是數字)。 我認為您真正想要的是將createUrlObj方法設置為

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

和你的模式是

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

另外,由於randNbruserUrl變量未在該路由中定義,因此您的'/:short'路由應具有對數據庫的調用。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM