#node.js #amazon-dynamodb
#node.js #amazon-dynamodb
Вопрос:
Я пытаюсь добавить элемент в существующую таблицу dynamodb с помощью запроса PUT. Я попробовал несколько вариантов кода, включая использование функций .put, а также .PutItem. Когда я жестко кодирую URL-адрес в браузере, я получаю следующую ошибку:
Cannot GET /add-student?student_id=5amp;name=carl
Когда я вырезаю точный URL, который выдал мне эту ошибку, и вставляю его в приложение для тестирования api, Postman, оно работает отлично. Я хорошо знаю, что ошибка говорит о том, что я попытался выполнить запрос GET, но я не знаю, что не так с моим кодом.
Вот мой код.
app.put('/add-student', function (req, res) {
var params = {
TableName : "student",
Item:{
"student_id" : {"N": req.query.student_id},
"name" : {"S": req.query.name}
}
}
dynamodb.putItem(params, function(err, data) {
if(err)
console.log(err);
else
console.log(JSON.stringify(data));
});
});
Что может быть причиной интерпретации этого как запроса get? Любая помощь очень ценится.
Ответ №1:
По умолчанию, при попадании URL-адреса из браузера, запрос будет отправлен как HTTP GET-запрос. Вы не можете отправить ничего, кроме запроса GET, из браузера напрямую, без использования плагинов или инструментов.
Это основная причина использования таких инструментов, как POSTMAN или любых других плагинов, таких как плагины Firefox, для тестирования служб REST, которые работают с различными HTTP-методами, такими как POST, PUT и т.д.
1) Я думаю, что когда вы нажмете URL от POSTMAN, вы бы выбрали метод PUT.
2) Если вы выберете метод GET в POSTMAN, вы получите ту же ошибку.
Смотрите скриншот ниже. Получение запроса на отправку от POSTMAN выдает ту же ошибку.
ПОЛУЧИТЬ запрос от POSTMAN:-
Запрос PUT от POSTMAN:-
Запрос отправки из браузера:-
Мой код такой же, как у вас, ожидайте имя таблицы:-
app.put('/add-movie', function (req, res) {
var params = {
TableName:"Movies",
Item:{
"yearkey": {"N" : req.query.yearkey},
"title": {"S" : req.query.title}
}
};
dynamodb.putItem(params, function(err, data) {
if(err) {
console.log(err);
res.send("Put is failed...");
}
else {
console.log(JSON.stringify(data));
res.send("Put is successful...");
}
});
});
Комментарии:
1. Спасибо за объяснение. Вы сэкономили мне больше времени, чем вы могли когда-либо знать. Однако у меня есть один дополнительный вопрос. Если для моего задания требуется написать скрипт на python для тестирования функции PUT, как бы я это сделал? Я пытался просто запросить браузер со вставленными URL-адресами, но это, очевидно, не сработает.
2. У Python должно быть несколько клиентских библиотек REST api. В Java есть клиент spring rest, подобный классу resttemplate. Другим альтернативным вариантом было бы использовать интерфейс командной строки CURL для вызова службы rest.