запрос mongoose findById не выполняется - PullRequest
0 голосов
/ 28 мая 2018

Для моего проекта Node я использую mongoose для хранения / доступа к пользовательской модели.В моем файле index.js я инициализирую все:

const restify = require('restify')
const Router = require('./lib/routing/Router.js')

const server = restify.createServer()
server.use(restify.plugins.bodyParser())

// init global variable
global.one = {}

// init database
const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/oneboard1')

mongoose.set('debug', true)
mongoose.connection.on('error', function(err) {
    console.error('MongoDB error: %s', err);
});

// init ORM
const models = require('./models.js')
one.model = models

// init middleware
const ClassAuthMiddleware = require('./middleware/AuthMiddleware')
const authMiddleware = new ClassAuthMiddleware()

// register routes
const rtr = new Router(server)
rtr.get('/user/profile', 'AuthController.getProfile').middleware('pre', authMiddleware)
rtr.post('/user/create', 'AuthController.createUser')
rtr.post('/user/auth', 'AuthController.issueToken')

rtr.bind()

server.listen(8080, function(){
    console.log('%s listening at %s', "OneBoard Server", server.url)
})

// a sanity check
one.model.User.findById('5b0b256b044e0e0274b4367c')
    .then(user => console.log(user))
    .catch(error => console.log(error))

Мой файл models.js:

const mongoose = require('mongoose')

module.exports = {
    User: mongoose.model('User', {
        email: {
            type: String,
            unique: true,
        },
        password: String,
        clips: { type: [], default: [] },
        created: { type: Date, default: Date.now },
        updated: { type: Date, default: Date.now },
    }),
}

Маршруты для аутентификации и создания пользователя работают отлично.Кроме того, запуск User.findById прекрасно работает в файле index.js и возвращает объект пользователя.Тем не менее, я написал некоторое промежуточное программное обеспечение Auth.В этой программе я пытаюсь запросить модель пользователя, используя тот же идентификатор, что и в проверке работоспособности index.js.Однако на этот раз функция findById просто не выполняется!Я включил отладку mongoose, и она не запускает никаких команд при выполнении функции findById, несмотря на то, что при тестировании она отображается как функция в объекте User.Вот файл промежуточного программного обеспечения:

const Middleware = require('../lib/routing/Middleware')
const jwt = require('jsonwebtoken')
const authHelper = require('auth-header')
const config = require('../config.js')

class AuthMiddleware extends Middleware {
    exec( req, res, breakChain, next ){
        const auth = authHelper.parse(req.header('authorization'))

        jwt.verify( auth.token, config.auth.jwtSecret, ( error, decoded ) => {
            console.log(decoded) // works
            console.log({_id: decoded.id}) // works
            console.log(one.model.User.findById) //works
            one.model.User.findById(decoded.id) // does nothing
                .then(user => console.log(user)) // doesn't execute
                .catch(error => console.log(error)) // doesn't execute

            console.log('post MW') // works

        })
    }
}


module.exports = AuthMiddleware

Я пытался отлаживать это часами, и я уверен, что это что-то простое, но я не могу понять, почему Mongoose победилне выполняю запрос findById.(Для записи я проверил, что имя коллекции совпадает с названием модели.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...