Mongoose.create 创建文档但 none 我的数据

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;

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

url缩短模块

'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。创建方法中的 属性 名称需要与您的模式匹配。 属性 值类型还必须匹配您的架构类型(目前 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'});

此外,您的 '/: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) 
    })
});