0

我正在尝试从位于/users同一域的路由中的端点获取 JSON 数据,但不知何故我总是出错:

Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0

当我查看错误的位置时,我得到了索引页面的来源(运行脚本的同一页面)。

这是路线(Hapi.js):

allUsers: {
    method: 'GET',
    path: '/users',
    options: AuthHelper.required,
    handler: async (request, h) => {
        let users = [];
        let error = false;

        await User.find({})
        .lean().then(result => {
            if (result && result.length) users = db.filterResult(result);
        })
        .catch(err => {
            error = true;
            console.log(err);
        });

        if (error) {
            return { message: 'There is an error.' };
        } else {
            return { users: users };
        }
    }
}

这是客户端代码:

fetch('http://localhost:3000/users').then((response) => response.json()).then((json) => console.log(json));

当我直接在浏览器中访问 URL 时,我得到了结果。

在此处输入图像描述

4

2 回答 2

0

顺便说一句,你应该使用reply接口方法,这样 hapi 会自动将其转换为有效的 JSON:

 allUsers: {
    method: 'GET',
    path: '/users',
    options: AuthHelper.required,
    handler: async (request, h) => {
        let users = [];
        let error = false;

        await User.find({})
        .lean().then(result => {
            if (result && result.length) users = db.filterResult(result);
        })
        .catch(err => {
            error = true;
            console.log(err);
        });

        if (error) {
            return { message: 'There is an error.' };
        } else {
            reply( { users: users } );
        }
    }
}
于 2018-04-07T19:23:07.930 回答
0

由于charlieftl,我意识到问题出在哪里。我打开了网络选项卡并跟踪了请求的去向——这是一个登录页面。没有随请求发送的凭据(从代码中可以看出,路由受到保护)所以响应总是返回索引页面的源,因为我被重定向回来。

我只需要将same-origin属性添加到credentials选项中。

fetch('http://localhost:3000/users', { credentials: 'same-origin' }).then((response) => response.json()).then((json) => console.log(json));
于 2018-04-08T11:24:20.087 回答