Route.delete () требует функцию обратного вызова, но получил [объект объекта] - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть приложение node-express, в котором у меня есть несколько Маршрутов для входа в систему, выхода из системы и регистрации и один Маршрут для проверки авторизованного Маршрута, доступ к которому возможен только через authToken.Я переместил маршруты в отдельный файл маршрута и получил вышеуказанную ошибку.

Это мой файл маршрутов пользователя:

const express = require('express');
const authenticate = require('./../middleware/authenticate');
const router = express.Router();
const {User} = require('./../models/user');

    router.post('/',(req, res) => {
    var body = _.pick(req.body,['email','password']);
    var user = new User(body);


    user.save().then(() => {
       return user.generateAuthToken()
    }).then((token) => {
        res.header('x-auth', token).send(user);
    }).catch((e) => {
        res.status(400).send(e);
    });
});


router.post('/login',(req, res) => {
    var body = _.pick(req.body, ['email', 'password']);
    User.findByCredentials(body.email, body.password).then((user) => {
        return user.generateAuthToken().then((token) => {
            res.header('x-auth', token).send(user);
        });
    }).catch((e) => {
        res.status(400).send(e);
    });
});

router.delete('/logout',authenticate, (req, res) => {
    req.user.removeToken(req.token).then(() => {
        res.status(200).send();
    },(e) => {
        res.status(400).send(e);
    }) ;
});


router.get('/me',authenticate, (req,res) => {
    res.send(req.user);
});


module.exports = router;

Ниже приведен мой основной файл server.js:

const express = require('express');
const _ = require('lodash');
var app = express();
const usersRoutes = require('./routes/users');

app.use(express.json());
app.use('/users', usersRoutes);

var {mongoose} = require('./db/mongoose');
var {User} = require('./models/user');
var {authenticate} = require('./middleware/authenticate');


const port = process.env.PORT || 3000 ;
app.listen(port, () =>  console.log(`Listening on ${port}...`))

У меня есть файл модели / схемы (мангуста) для пользователя, поэтому, если вам нужно, я готов отредактировать свой вопрос.Спасибо.

1 Ответ

0 голосов
/ 30 ноября 2018

Проблема в том, что router.delete ожидает функцию для параметра промежуточного программного обеспечения (как вы сделали это в файле server.js с app.use(express.json())), поэтому его можно использовать как обратный вызов, который вызывается всякий раз, когда запрос достигает вашего маршрута,

Попробуйте изменить authenticate на authenticate().

Похоже, что в вашем файле маршрутов пользователя вы импортируете весь модуль, который содержит функцию аутентификации, поэтому при попытке доступа к нему, какФункция вы получите ошибку.Вам нужно импортировать его, как вы это делали в файле server.js.

Измените строку const authenticate = require('./../middleware/authenticate'); на const {authenticate} = require('./../middleware/authenticate');.

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