Два пользовательских метода / конечные точки, использующие loopBack, один работает, другой дает 401 - PullRequest
0 голосов
/ 20 ноября 2018

Я создал две пользовательские конечные точки с помощью Loopback.

Account.deleteAllHearingTests = function (req, callback) {
    console.log('here comes the req to delete all hearing tests', req);
    Account.findById(req.accessToken.userId)
        .then(account => {
            if (!account) {
                throw new Error('cannot find user');
            }
            return app.models.HearingTest.updateAll({ accountId: account.id }, { isDeleted: new Date() });
        })
        .then(() => {
            callback(null);
        })
        .catch(error => {
            callback(error);
        })
}
Account.remoteMethod(
    'deleteAllHearingTests', {
        http: {
            path: '/clearHearingTests',
            verb: 'post'
        },
        accepts: [
            { arg: 'req', type: 'object', http: { source: 'req' } }
        ],
        returns: {}
    }
);

вторая выглядит следующим образом.

Account.deleteSingleHearingTest = function (req, callback) {
        // console.log('accounts.js: deleteSingleHearingTest: are we being reached????', req)
        Account.findById(req.accessToken.userId)
            .then(account => {
                if (!account) {
                    throw new Error('Cannot find user');
                }
                console.log('account.js: deleteSingleHearingTest: req.body.hearingTestId    N: ', req.body.hearingTestId);
                return app.models.HearingTest.updateAll({ accountId: account.id, id: req.body.hearingTestId }, { isDeleted: new Date() });

            })
            .then(() => {
                callback(null);
            })
            .catch(error => {
                callback(error);
            });
    }

    Account.remoteMethod(
        'deleteSingleHearingTest', {
            http: {
                path: '/deleteSingleHearingTest',
                verb: 'post'
            },
            accepts: [
                { arg: 'req', type: 'object', description: 'removes a single hearing test', http: { source: 'req' } }
            ],
            description: 'this is the end point for a single delete',
            returns: {}
        }
    );

};

Первый пользовательский метод возвращает 401 ответ о состоянии, когда я делаю начальнуювыборки.Второй возвращает 200.

Внутри моего файла действий первый метод вызывается с чем-то, похожим на это:

export function deleteAllHearingTests() {
    return (dispatch, getState) => {
        let state = getState();
        if (!state.user || !state.user.accessToken || !state.user.accessToken.id || !state.user.accessToken.userId) {
            console.debug('deleteAllHearingTests', state.user);
            // TODO: ERROR
            return;
        }
        fetch(SERVERCONFIG.BASEURL + '/api/Accounts/clearHearingTests?access_token=' + state.user.accessToken.id, {
            method: 'POST',
            headers: SERVERCONFIG.HEADERS
        })
            .then(response => {
                console.log('here is your response', response);
                if (response.status !== 200) {
                    throw new Error('Something is wrong');
                }
                return response.json()
            })

второй метод вызывается с

export const deleteSingleHearingTest = (hearingTestNumber) => {
    return (dispatch, getState) => {
        let state = getState();
        if (!state.user || !state.user.accessToken || !state.user.accessToken.id || !state.user.accessToken.userId) {
            console.debug('writeTestResult', state.user);
            // TODO: ERROR
            return;
        }
        console.log('single delete ', SERVERCONFIG.BASEURL + '/api/Accounts/deleteSingleHearingTest?access_token=' + state.user.accessToken.id)
        fetch(SERVERCONFIG.BASEURL + '/api/Accounts/deleteSingleHearingTest?access_token=' + state.user.accessToken.id, {
            method: 'POST',
            headers: SERVERCONFIG.HEADERS,
            body: JSON.stringify({ "hearingTestId": hearingTestNumber })


        })
            .then(response => {
                console.log('getting response from initial fetch inside deleteSingleReqport', response);

Они почти идентичны, однако один работает .. другой не работает.Каковы некоторые возможные причины для 401?

1 Ответ

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

Вы пытались вызывать эти методы с помощью внешнего инструмента, такого как почтальон, чтобы вы точно знали, не пропустили ли вы access_token или что-то еще?Кроме того, когда вы сравниваете код одной и другой функции, вы можете видеть, что вы связываете updateAll с другими аргументами.Трудно сказать без оригинального кода, но, может быть, проблема есть?Сравните ниже:

return app.models.HearingTest.updateAll(
    { accountId: account.id }, 
    { isDeleted: new Date() });

return app.models.HearingTest.updateAll(
    { accountId: account.id, id: req.body.hearingTestId }, 
    { isDeleted: new Date() });

Кроме того, в методе fetch они также являются различиями, в одном случае вы упускаете следующее:

    body: JSON.stringify({ "hearingTestId": hearingTestNumber })

Что вы также можете сделать для отладки иЧтобы предоставить больше данных, нужно запустить сервер в режиме отладки, вызвав:

export DEBUG=*; npm start
...