Я могу свернуться на сервер node.js, но не могу http запрос от JavaScript - PullRequest
0 голосов
/ 13 апреля 2019

В данный момент я могу сделать curl -X GET 127.0.0.1:8081/flower в моей командной строке и получить свой JSON, как я ожидал.

Однако всякий раз, когда я пытаюсь выполнить один и тот же запрос GET для одного и того же точного URL-адреса измой код, я получаю неопределенным во всех отношениях я пытаюсь.Ниже приведен мой код для javascript и node.js.Я хотел бы сохранить responseText в глобальной переменной, чтобы его можно было сохранить в виде массива.

Это мой HTTP-запрос на получение запроса JSON с сервера:

function apiCall() {

 var menuRqst = new XMLHttpRequest;
    menuRqst.open('GET', 'http://127.0.0.1:8081/flower', true);
    menuRqst.send();
    menuRqst.addEventListener('readystatechange', processRequest, false);
    function processRequest(d) {
        if (menuRqst.readyState === 4 && menuRqst.status === 200) {
            var flowResponse = menuRqst.responseText;
            return flowResponse;
        }
    }
}

Это мой node.js, где я могу curl -X GET 127.0.0.1:8081/flower и получить данные, найденные в flower.JSON, в ответ:

var express = require('express');
var app = express();
var fs = require("fs");

app.get('/flower', function (req, res) {
    fs.readFile(__dirname + "/" + "flower.json", 'utf8', function (err, data) {
        console.log(data);
        res.end(data);
    });
})

var server = app.listen(8081, function () {
    var host = server.address().address
    var port = server.address().port
    console.log("Example app listening at http://%s:%s", host, port)
})

Ответы [ 2 ]

0 голосов
/ 15 апреля 2019

Я сделал это, я думаю, с помощью cors, и я также слил проект cordova в проект node.js.Я смог успешно добиться этого с помощью этого кода.Javascript:

    function httpGet(theUrl) {
    var xmlHttp = new XMLHttpRequest();
    xmlHttp.open("GET", theUrl, false); // false for synchronous request
    xmlHttp.send(null);
    return xmlHttp.responseText;
}
0 голосов
/ 13 апреля 2019

Все дело в асинхронности.apiCall ничего не возвращает.

Кроме того, более того, вы должны найти способ подготовить ответ, когда он будет готов, возможно, добавив Promise в начале apiCall.

* 1007.* Кроме того, если это код браузера, вы можете попробовать fetch и использовать async/await.

С получением:

async function apiCall () {
  const response = await fetch('http://127.0.0.1:8081/flower');
  const jsonResponse = await response.json();
  return jsonResponse
}
...