Javascript req.params返回undefined(它实际上以字符串形式返回:itemId,因此它有点未定义),而不是id

Javascript req.params返回undefined(它实际上以字符串形式返回:itemId,因此它有点未定义),而不是id,javascript,node.js,reactjs,Javascript,Node.js,Reactjs,这几天我不知道我的代码出了什么问题,也找不到任何解决方案 我还尝试使用query获取id(在车间路线上移动控制器,当然,更改:with the?),以及req.body尝试使用id获取输入,但没有成功 我还尝试了POST和PATCH而不是GET,但都没有成功 这是我的密码: auth.js(控制器) auth.js(路由) 然后在前端,我首先将项目id作为道具传递给AddToCart组件,如下所示: 我从数据库中加载所有项目的车间组件: <ItemS

这几天我不知道我的代码出了什么问题,也找不到任何解决方案

我还尝试使用query获取id(在车间路线上移动控制器,当然,更改:with the?),以及req.body尝试使用id获取输入,但没有成功

我还尝试了POST和PATCH而不是GET,但都没有成功

这是我的密码:

auth.js(控制器)

auth.js(路由)

然后在前端,我首先将项目id作为道具传递给AddToCart组件,如下所示:

我从数据库中加载所有项目的车间组件:

                    <ItemStyle key={item._id}>

                    <h1>title</h1>
                    <p>{item.title}</p>

                    <img alt={item.title} src={item.image}></img>

                    <h1>description</h1>
                    <p>{item.description}</p>

                    <h1>price</h1>
                    <p>{item.price}</p>

                    <AddToCart itemId={item._id} />
                
                </ItemStyle>

标题
{item.title}

描述 {item.description}

价格 {item.price}

AddToCart组件:

class AddToCart extends Component {

addToCart = async () => {

    await fetch(`http://localhost:8090/auth/add-to-cart/:itemId`, {

        method: 'GET',

        headers: {

            'Accept': 'application/json',
            'Content-Type': 'application/json',

        },

        credentials: 'include',

    })

    .then(() => { 

        /* staying on the same page */
        return window.location.replace('/shop');

    })

    .catch(err => console.log(err));

}

render() {

    return(

        <form encType="application/x-www-form-urlencoded">

            <input type="hidden" name="itemId" value={this.props.itemId} />

            <button onClick={this.addToCart}>Add To Cart</button>

        </form>

    )

}

}
类AddToCart扩展组件{
addToCart=async()=>{
待命(`http://localhost:8090/auth/add-到购物车/:itemId`{
方法:“GET”,
标题:{
“接受”:“应用程序/json”,
“内容类型”:“应用程序/json”,
},
凭据:“包括”,
})
.然后(()=>{
/*保持一致*/
返回窗口。位置。替换('/shop');
})
.catch(err=>console.log(err));
}
render(){
返回(
添加到购物车
)
}
}

如果我从输入中删除type=“hidden”,我实际上可以看到为该项分配了正确的id。有人能解决这个问题吗?如果出于某些原因,我反对stackoverflow政策,请让我知道,我将更新问题。提前谢谢你。

这里有几件事你应该做-

  • 删除addToCart函数中的等待,它不应与“then”一起使用

  • 在addToCart函数中,确保获得itemId值

  • 更改API端点-

    http://localhost:8090/auth/add-购物车/${itemId}


  • 以下是你应该做的几件事-

  • 删除addToCart函数中的等待,它不应与“then”一起使用

  • 在addToCart函数中,确保获得itemId值

  • 更改API端点-

    http://localhost:8090/auth/add-购物车/${itemId}

  • 我发现了你的问题

    你不应该使用
    .then()
    一起等待。我建议您仅使用
    wait
    。像这样:

    var response = await fetch(`http://localhost:8090/auth/add-to-cart/${itemId}`, {
    
        method: 'GET',
    
        headers: {
    
            'Accept': 'application/json',
            'Content-Type': 'application/json',
    
        },
    
        credentials: 'include',
    
    });
    
    另外,如果您注意到,我在上面使用了
    ${itemId}
    。如果要在字符串中设置变量。你必须那样使用它。

    我发现了你的问题

    你不应该使用
    .then()
    一起等待。我建议您仅使用
    wait
    。像这样:

    var response = await fetch(`http://localhost:8090/auth/add-to-cart/${itemId}`, {
    
        method: 'GET',
    
        headers: {
    
            'Accept': 'application/json',
            'Content-Type': 'application/json',
    
        },
    
        credentials: 'include',
    
    });
    

    另外,如果您注意到,我在上面使用了
    ${itemId}
    。如果要在字符串中设置变量。你必须这样使用它。

    你说的
    console.log(itemId)
    返回
    itemId
    ?它是返回
    itemId
    还是
    未定义的
    ?你能试着把
    req.params
    也记录下来吗?嗨,谢谢你的回答。它实际上返回:itemId作为字符串(因此不是实际的id),如果不清楚,很抱歉。您说的
    console.log(itemId)
    返回
    itemId
    ?它是返回
    itemId
    还是
    未定义的
    ?你能试着把
    req.params
    也记录下来吗?嗨,谢谢你的回答。它实际上返回:itemId作为一个字符串(所以不是实际的id),如果不清楚,很抱歉。非常感谢,这就是我解决问题的方法(我还必须在addToCart函数中找到id)。@msorr95听到这个消息太好了。请随意接受我的回答;)非常感谢,这就是我解决这个问题的方法(我还必须在addToCart函数中找到id)。@msorr95听到这个消息真是太好了。请随意接受我的回答;)嗨,你救了我!我确实用此行this.props.itemId在函数中获得了itemId,并按照您的建议更改了API点,现在它工作得很好!非常感谢你!!如果你告诉我怎么做,我会接受你的答案(我总是在问题中看到这种评论,但老实说,我不知道接受答案有什么作用)。在Shop组件中,你通过道具将itemId参数传递给AddToCart组件。道具基本上是传递到react组件的参数。道具用于将数据从一个组件传递到另一个组件。在addToCart函数中,没有局部变量“itemId”,因为值在props中。这就是为什么要访问props中的值,我们使用这个.props.itemIdHi Pankaj,我的意思是,在我阅读了您的评论之后,我确实在函数中找到了itemId。要不是你,我是不会解决的。再次感谢你!还有,我接受了你的回答,因为你是第一位,也是最满意的。嗨,你救了我!我确实用此行this.props.itemId在函数中获得了itemId,并按照您的建议更改了API点,现在它工作得很好!非常感谢你!!如果你告诉我怎么做,我会接受你的答案(我总是在问题中看到这种评论,但老实说,我不知道接受答案有什么作用)。在Shop组件中,你通过道具将itemId参数传递给AddToCart组件。道具基本上是传递到react组件的参数。道具用于将数据从一个组件传递到另一个组件。在addToCart函数中,没有局部变量“itemId”,因为值在props中。这就是为什么要访问props中的值,我们使用这个.props.itemIdHi Pankaj,我的意思是,在我阅读了您的评论之后,我确实在函数中找到了itemId。如果不是因为你,我不会
    var response = await fetch(`http://localhost:8090/auth/add-to-cart/${itemId}`, {
    
        method: 'GET',
    
        headers: {
    
            'Accept': 'application/json',
            'Content-Type': 'application/json',
    
        },
    
        credentials: 'include',
    
    });