Req не определена ошибка с моделью запросов мангуста?

winston спросил: 03 февраля 2018 в 01:06 в: node.js

Я хочу создать запрос nodejs в моей модели, который запрашивает таблицу, где ее идентификатор "владелец" совпадает с идентификатором текущего зарегистрированного пользователя. Я использую Passport для управления аутентификацией и mongoose для создания моделей объектов данных. Текущий запрос у меня:

module.exports.getUserDonations = function(callback){
  var currentUserID = req.user.id;
  return Donation.find({'owner': currentUserID}, function(err, donations) {    return callback(err, donations);  });

Всякий раз, когда я вызываю эту функцию в файле маршрутов, я получаю сообщение об ошибке ReferenceError: req is not defined. Есть ли способ получить текущий идентификатор пользователя в модели? Или есть способ просто объявить currentUserID в моей модели, а затем установить значение в маршрутах, чтобы его можно было использовать для фильтрации запроса?

EDIT: добавлено больше кода:

app.js

const fs = require('fs');
const _ = require('lodash');
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const Handlebars = require('handlebars');
const exphbs = require('express-handlebars');
const hbsEqual = require('handlebars-helper-equal');
const expressValidator = require('express-validator');
const flash = require('connect-flash');
const session = require('express-session');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const mongo = require('mongodb');
const mongoose = require('mongoose');mongoose.connect('mongodb://localhost/tipcup');
var db = mongoose.connection;const routes = require('./routes/index');
const users = require('./routes/users');
const user = require('./routes/user');
const settings = require('./routes/settings');
const profile = require('./routes/profile');// Init App
var app = express();// Handlebars helpers
var hbs = exphbs.create({
  // Specify helpers which are only registered on this instance.
  defaultLayout: 'layout',
  helpers: {
    equal: function(lvalue, rvalue, options) {
      if (arguments.length < 3)
        throw new Error("Handlebars Helper equal needs 2 parameters")
      if (lvalue != rvalue) {
        return options.inverse(this)
      } else {
        return options.fn(this)
      }
    },
  }
});// View Engine
//app.engine('handlebars', exphbs({defaultLayout: 'layout'}));
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');
app.set('views', path.join(__dirname, 'views'));// Set Static Folder
app.use(express.static(path.join(__dirname, 'public')));// BodyParser middleware
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false}));// Express Session
app.use(session({
  secret: 'secret',
  saveUninitialized: true,
  resave: true
}));// Passport Init
app.use(passport.initialize());
app.use(passport.session());// Express Validator
app.use(expressValidator ({
  errorFormatter: function(param, msg, value) {
    var namespace = param.split('.')
    , root = namespace.shift()
    , formParam = root;    while(namespace.length){
      formParam += '[' + namespace.shift() + ']';
    }
    return {
      param: formParam,
      msg: msg,
      value: value
    };
  }
}));// Connect Flash
app.use(flash());// Global Vars
app.use(function (req, res, next){
  res.locals.success_msg = req.flash('success_msg');
  res.locals.error_msg = req.flash('error_msg');
  res.locals.error = req.flash('error');
  res.locals.user = req.user || null;
  next();
});app.use('/', routes);
app.use('/users', users);
app.use('/user/', user);
app.use('/settings', settings);
app.use('/profile', profile);const userController = require('./models/donation');
app.route('/profile', profile, passport, userController.getUserDonations);// Set Port
app.set('port', (process.env.PORT || 3000));app.listen(app.get('port'), function(){
  console.log('Server started on port '+app.get('port'));
});

profile.js файл маршрута - вот где я хочу сделать запрос, чтобы получить все пожертвования для пользователя

var express = require('express');
var router = express.Router();
var passport = require('passport');
var LocalStrategy = require('passport-local').Strategy;
var User = require('../models/user');
var Donation = require('../models/donation');// GET profile
router.get('/', function(req, res) {
  const vm = req.user;
  Donation.getUserDonations(function(err, donations) {    if(err) {
        res.send('error');
        next();
    }    const vd = { donations };
    res.render('profile', {vm, vd});  });
});module.exports = router;

donation.js - это модель данных для пожертвования, имеет вопрос, о котором идет речь

var mongoose = require('mongoose');
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
var express = require('express');var DonationSchema = new mongoose.Schema({
  name: {
    type: String,
    index: true,
    require: true
  },
  price: {
    type: Number,
    require: false
  },
  description: {
    type: String,
    require: false
  },
  owner: {
    type: String,
    default: false,
    require: false
  },
  enddate: {
    type: Date,
    require: false
  }
});var Donation = module.exports = mongoose.model('Donation', DonationSchema);// module.exports.getUserDonations = function(callback){
//   var currentUserID = req.user.id;
//   return Donation.find({'owner': currentUserID}, function(err, donations) {
//
//     return callback(err, donations);
//
//   });
//
// }module.exports.getUserDonations = function (req, res, next) {
  console.log(req.user)
  //let currentUserID = req.user._id
  Donation.find({owner: currentUserID}, (err, result) => {    return res.send(result)
  });
}


0 ответов