#javascript #html #node.js #forms #url-parameters
#javascript #HTML #node.js #формы #url-параметры
Вопрос:
Я пытаюсь передать числовой идентификатор в качестве параметра в URL на сервер. Что я делаю не так?
У меня есть приложение диспетчера задач, в котором для чтения задачи пользователи могут читать задачу по ее идентификатору, теперь я передаю это непосредственно в postman, введя идентификатор (5e8b) как:
{{url}}/tasks/5e8b
Но я не смог заставить его работать в браузере, вот мой Html-код :
<h1>Read Task by Task ID</h1>
<form id="task-id-form">
<input type="text" id="task-id"><br> <br>
<button id="task-id-button">Find Task</button>
<p id="task-id-display"></p>
</form>
И мой JS-код на стороне сервера (который не работает) :
const readTaskForm = document.querySelector( "#task-id-form" );
readTaskForm.addEventListener( "submit", ( e ) => {
const readTaskId = document.querySelector( "#task-id" ).value;
const params = { id: readTaskId }; // new addition
const urlParams = new URLSearchParams( Object.entries( readTaskId ) );
fetch( "http://localhost:3000/tasks/" urlParams, {
method: 'get',
headers: {
'Accept': 'application/json, text/plain, */*',
'Content-Type': 'application/json',
"Authorization": `Bearer` `${ inMemoryToken }`
}
} ).then( res => res.json() )
.then( res => {
console.log( res );
}
);
} );
И мой код js серверного узла имеет вид (который корректно работает в postman):
router.get( "/tasks/:id", auth, async ( req, res ) => {
const _id = req.params.id;
try {
const task = await Task.findOne( { _id, owner: req.user._id } );
if ( !task ) {
return res.status( 401 ).send( { error: "Task id not found" } );
}
res.send( { task } );
} catch ( e ) {
res.status( 400 ).send( e );
}
} );
Любая помощь высоко ценится.
Комментарии:
1. Если вы сформируете свой URL следующим образом: ‘{{url}}/tasks/id=5e8b’, что произойдет?
2. Извините, URL в браузере выглядит так: localhost:3000/tasks/5e8b
3. Я не думаю, что это работает с id = 5e8b
4. извините, да, мне нужно перечитать ваш вопрос
5. пожалуйста, определите «не работает» и «заставьте это работать». какое конкретное поведение отображается и какие сообщения об ошибках вы видите в инструментах вашего браузера или в консоли вашего сервера?
Ответ №1:
Я думаю, вам не обязательно использовать URLSearchParams в качестве параметра, просто используйте readTaskId
const readTaskForm = document.querySelector("#task-id-form");
readTaskForm.addEventListener("submit", (e) => {
const readTaskId = document.querySelector("#task-id").value;
//const params = { id: readTaskId }; // new addition
//const urlParams = new URLSearchParams(Object.entries(readTaskId));
fetch("http://localhost:3000/tasks/" readTaskId, {
method: "get",
headers: {
Accept: "application/json, text/plain, */*",
"Content-Type": "application/json",
Authorization: `Bearer` `${inMemoryToken}`
}
})
.then((res) => res.json())
.then((res) => {
console.log(res);
});
});
Комментарии:
1. Выдает ошибку — 400 Неверный запрос в строке ` fetch( » localhost: 3000 / tasks » readTaskId, { `
2. устанавливаете ли вы косую черту в конце «задач»? ` fetch( «localhost: 3000/tasks/» readTaskId, { ` . покажите нам оповещение или консоль. журнал конечного URL (с параметром тоже)
3. Да, я ставлю косую черту в конце URL как
fetch( "http://localhost:3000/tasks/" readTaskId, {
и у меня есть свой маршрут в серверной части как:router.get( "/tasks/:id", auth, async ( req, res ) => {
Кроме того, ваш веб-сайт Blahbox хорошо разработан 🙂4. Спасибо за Blahbox!. Вы должны отправить нам дополнительную информацию об ошибке. Ошибка полной консоли, какой-то скриншот…. Возможно, у вашего заголовка возникла какая-то проблема.
5. Привет, Матиас, вот скриншот консоли: ibb.co/gVdrczb