获取请求不会从端点返回JSON

时间:2018-04-07 18:47:02

标签: javascript fetch hapi.js

我试图从位于同一域的路由template <typename T> class ListNode { private: T data; int priority; ListNode* prev; ListNode* next; public: ListNode() { prev = next = NULL; } ListNode(T d, int pr, ListNode* p, ListNode* n) { data = d; priority = pr; prev = p; next = n; } template <typename T> friend class List; }; template <typename T> class List { private: ListNode* list_head; ListNode* list_tail; public: List() { list_head = list_tail = NULL; } ~List() { clear(); } bool isEmpty() { return list_head == NULL; } bool contains(T value); void addToQueList(T value, int priority); T head() { return list_head->data; } T tail() { return list_tail->data; } T removeHead(); T removeTail(); void clear(); }; template <typename T> bool List<T>::contains(T value) { ListNode *temp = list_head; while (temp != NULL && temp->data != value) temp = temp->next; return temp != NULL; } 中的端点获取JSON数据但不知何故我总是收到错误:

/users

当我查看错误的位置时,我获取了索引页面的源代码(运行脚本的同一页面)。

这是路线(Hapi.js):

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

这是客户端代码:

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 };
        }
    }
}

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

enter image description here

2 个答案:

答案 0 :(得分: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 } );
        }
    }
}

答案 1 :(得分:0)

由于charlieftl,我意识到问题出在哪里。我打开了网络标签,然后按照要求进行操作 - 这是一个登录页面。没有凭请求发送的凭证(从代码中可以看出,路由受到保护)因此响应总是返回索引页面的源,因为我被重定向回来了。

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

fetch('http://localhost:3000/users', { credentials: 'same-origin' }).then((response) => response.json()).then((json) => console.log(json));