Как получить ответ JSON от вызова API - PullRequest
0 голосов
/ 02 апреля 2019

Я хочу получить ответ JSON от вызова API, который я делаю.Например, я хочу получить что-то вроде этого:

{"error": {}, "success": true, "data": {"user": "tom", "password": "123", "умение": "начинающий", "год": 2019, "месяц": "мар", "день": 31, "playmorning": 0, "playafternoon": 1, "playevening": 1}}

Это мой вызов API, использующий fetch в реакции.(да, я знаю, что отправка пароля в URL - это плохо, это для школьного проекта)

        fetch('/api/user/'+ user + '?password=' + password, {
            method: 'GET',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            }}).then((res) => {
                console.log(res); //I want to get the JSON stuff here
              })

Это вызов API, который я вызываю.

app.get('/api/user/:user', function (req, res) {
    // console.log(JSON.stringify(req));
    // var user = req.body.user;
    // var password = req.body.password;

    var user = req.params.user;
    var password = req.query.password;

    console.log(user, password);

    var result = { error: {} , success:false};
    if(user==""){
        result["error"]["user"]="user not supplied";
    }
    if(password==""){
        result["error"]["password"]="password not supplied";
    }
    if(isEmptyObject(result["error"])){
        let sql = 'SELECT * FROM user WHERE user=? and password=?;';
        db.get(sql, [user, password], function (err, row){
            if (err) {
                res.status(500); 
                    result["error"]["db"] = err.message;
            } else if (row) {
                res.status(200);
                result.data = row;
                result.success = true;
            } else {
                res.status(401);
                result.success = false;
                    result["error"]["login"] = "login failed";
            }
            res.json(result);
        });
    } else {
        res.status(400);
        res.json(result);
    }
});

Когда я запускаю console.log(res) в вызове выборки это то, что напечатано:

Response {тип: "basic", url: "http://localhost:3000/api/user/tim?password=123", перенаправлено: false, статус: 200, ok: true,…} body: (...) bodyUsed: falseheaders: Headers {} ok: trueredirected: falsestatus: 200statusText: "OK" тип: "basic" url: "http://localhost:3000/api/user/tim?password=123"proto: Ответ

Когда я посещаювеб-сайт, вывод:

{"error": {}, "success": true, "data": {"user": "tom", "password": "123", "skill":" beginner "," year ": 2019," month ":" Mar "," day ": 31," playmorning ": 0," playafday ": 1," playevening ": 1}}

Это то, что я хочу.

Ответы [ 3 ]

1 голос
/ 02 апреля 2019

Как правило, вы возвращаете тело ответа из Обещания.

fetch(`${baseUrl}/api/user/${user}?password=${password}`, {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }})
  .then(response => response.json())
  .then‌​(data=> { 
    console.log(data); 
  })
0 голосов
/ 02 апреля 2019

чтобы получить содержимое тела JSON из ответа, вам нужно использовать json ()

fetch('/api/user/'+ user + '?password=' + password, {
            method: 'GET',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json',
            }}).then((res) => {
                const jsonData = res.json();
                console.log(jsonData);
              })
0 голосов
/ 02 апреля 2019

Попробуйте проанализировать ответ следующим образом:

fetch('/api/user/'+ user + '?password=' + password, {
  method: 'GET',
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }}).then(async (res) => {
    const raw = await res.text();
    const parsed = raw ? JSON.parse(raw) : { success: res.ok };

    console.log(parsed);
  })

В этом случае вы также можете добавить некоторые проверки статусов ответов (если хотите, конечно) вместе с анализом результата JSON.

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