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