Получить запрос на RESTful service не работает

#html #node.js

#HTML #node.js

Вопрос:

Я пытаюсь использовать restful service для доступа к данным, которые отправляются в кластер MongoDB. Моя проблема в том, что я даже не могу подключиться к сервису, запрос get, похоже, не работает. Console.log («test») не достигнут, и я получаю пустую консоль, поэтому я не думаю, что readystate меняется.

Я провел множество поисков и устранения неполадок и обнаружил, что ссылка работает сама по себе (https://RESTfulServiceExample .[REPL.ЭТО ИМЯ ПОЛЬЗОВАТЕЛЯ].repl.co/items ) и отображает данные при вставке в строку поиска. Я также пробовал менять браузеры и даже сравнивал с кодом моего друга, который работает, и ВСЕ же я даже не могу подключиться.

Я уверен, что это просто какая-то глупая маленькая ошибка, но я здесь в полном недоумении, поэтому любая помощь ОЧЕНЬ ценится!

Файл с запросом get. Я отредактировал имя пользователя. ‘item’ — это имя кластера MongoDB.

 <html>
<head>
<script type="text/javascript">

var xhttp = new XMLHttpRequest();

xhttp.onreadystatechange = function() {
if (xhttp.readyState == 4 amp;amp; this.status == 200) {
  console.log("test"); //NOT REACHED
  var responseObj = JSON.parse
  (xhttp.responseText); 

};
}
//PROBLEM HERE
xhttp.open("GET", "https://RESTfulServiceExample.[REPL.IT USERNAME].repl.co/items", true);
xhttp.send();



</script>
<script type="text/javascript" src="https://canvasjs.com/assets/script/canvasjs.min.js"> 
</script></head>
<body>
<div id="chartContainer" style="height: 300px; width: 100%;">
</div>
</body>
</html>
  

Служба RESTful:

Index.js : (отредактировано имя пользователя и пароль mongodb.

 var express = require('express'); // control-shift-S to bring up shell in repl.it and npm 
install express / other packages
var app = express();
var port = 5000; // the port is automatically routed by the repl.it domain

mongoose = require('mongoose');
Item = require('./model/model.js');
bodyParser = require('body-parser');

mongoose.Promise = global.Promise; // for asynchronous callbacks
mongoose.connect('mongodb srv://[USERNAME]:[PASSWORD]@cluster0.thmkp.mongodb.net/Pokemon? 
retryWrites=trueamp;w=majority'); 

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var routes = require('./routes/routes'); //importing route
routes(app); //register the route


app.listen(port);
  

Routes.js

 'use strict';

module.exports = function(app) {
  var itemList = require('../controllers/controller');

app.route('/items')
  .get(itemList.list_items)
  .post(itemList.create_item); 

app.route('/items/:id')
  .get(itemList.get_item)
  .put(itemList.update_item) 
  .delete(itemList.delete_item);
};
  

Комментарии:

1. The index.js файл на самом деле не важен, вместо этого вы должны показать файл маршрутов, в котором обрабатывается запрос. Также есть некоторые события, запущенные для xmlhttprequest, это может показать возможную ошибку, прогресс и т. Д. developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest /…

2. @Molda Спасибо. Отредактировано, чтобы включить файл маршрутов.

3. Что ж Routes.js на самом деле это тоже не помогает, так как не содержит функции обработчика (контроллера), которая является важной частью. Кажется, это в контроллерах itemList.list_items .

4. Чтобы увидеть все запросы, поступающие на ваш сервер, вы можете добавить простое промежуточное программное обеспечение, например, так app.use(function(req, res, next){ console.log(req.method, req.url); next();}) , как показано ниже app.use(bodyParser.json());

5. @Molda Спасибо за это. Обнаружил, что сервер получает вызов GET. Также выяснилось, что ‘this.status’ остается равным 0, вероятно, поэтому консоль. журнал не доступен. Не знаю, почему это так.

Ответ №1:

Попробуйте изменить

 if (this.readyState == 4 amp;amp; this.status == 200) {
// your code block
}