如何在url中传递参数,并在JavaScript服务器端的NodeJS后端使用冒号?

问题描述

我试图将数字ID作为参数传递给服务器。我在做什么错了?

我有一个任务管理器应用程序,可以在其中读取任务,用户可以通过其ID读取任务,现在我通过输入ID(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 );
    }
} );

我们非常感谢您的帮助。

解决方法

我认为您不必使用 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:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...