You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的Express GET方法返回ObjectId类型匹配错误提示?

问题根因

  • 你前端ajax请求的URL中:userId是路由占位符,没有替换为真实的用户ID值,导致后端拿到的userId是字符串:userId,不符合MongoDB ObjectId的格式,触发mongoose类型校验报错,你控制台看到的就是报错返回的信息
  • 前端代码存在语法错误:let = userId = $('#userId').val();多写了一个等号,会直接抛出语法异常
  • 你使用路由参数传值,不需要额外在ajax的data字段传递userId,属于冗余配置

修正后的代码

前端JS部分

let thisArray = []
// 修正语法错误,移除多余的等号
let userId = $('#userId').val();

// 可选校验:先判断userId是否存在,避免无效请求
if (!userId) {
    console.error('用户ID为空,请检查取值逻辑');
    return;
}

$.ajax({
    method:'GET',
    // 替换路由占位符为真实的userId
    url:`/auth/marcacoesGET/${userId}`,
    dataType: 'json',
    // 移除冗余的data传参
    success:function(marcacao){
        thisArray = marcacao
        buildTable(thisArray);
        console.log(thisArray)      
    },
    // 可选添加错误回调,方便排查请求异常
    error: function(err) {
        console.error('请求失败', err);
    }
})

function buildTable(marcacao){
    let table = document.getElementById('tabelaCliente')

    for(let i = 0; i < marcacao.length; i++){
        let row = `<tr>
                        <td>${marcacao[i].address}</td>
                        <td>${marcacao[i].date}</td>
                        <td>${marcacao[i].hour}</td>
                        <td>${marcacao[i].type}</td>
                        <td>${marcacao[i].state}</td>
                   </tr>`
        table.innerHTML += row
    }
}

后端可选优化

可以先校验传入的userId是否为有效的ObjectId,避免无效查询:

const mongoose = require('mongoose');
exports.getMarcacoes = async(req, res) => {
    const { userId } = req.params;
    // 先校验ID格式是否合法
    if (!mongoose.Types.ObjectId.isValid(userId)) {
        return res.status(400).json({message: '无效的用户ID格式'});
    }
    try {
        const user = await User.findById(userId).populate('marcacaoCliente');
        console.log('user', user);
        res.status(200).json(user?.marcacaoCliente || []);
    } catch (err) {
        res.status(500).json({message:err});
    }
}

内容的提问来源于stack exchange,提问作者Lolstroop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.18 17:54:03