使用loopBack的两个自定义方法/端点,一个工作,另一个给401

问题描述 投票:0回答:1

我用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的可能原因是什么?

react-native redux fetch loopbackjs
1个回答
0
投票

您是否尝试使用外部工具(如邮递员)调用这些方法,因此您确切知道您是否不会错过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
© www.soinside.com 2019 - 2024. All rights reserved.