javascript - Mongoose 错误 [CastError] : Cast to string failed for value "{}" at path "userData.email" for model "order"

标签 javascript node.js angular rest

我想通过电子邮件获取给定用户搜索的订单:“admin”,但出现错误:

MongooseError [CastError]: Cast to string failed for value "{}" at path "userData.email" for model "order".

我没有收到任何回复。

后台-js文件:

router.get('/user-orders', (req, res) => {
  const user = req;
  Order.find({ "userData.email": user }, (error, order) => {
    if (error) {
      console.log(error);
    } else {
      return res.json({ order });
    }
  })
})

前端 - 服务:

 userOrders(user) {
    return this.http.get<User>(this.userOrdersUrl, user);
  }

前端 - ts 文件:

  constructor(private orderService: OrderService, private router: Router) {
    this.orderService.userOrders('admin').subscribe(
      res => console.log(res),
      err => console.log(err)
    );
  }

如果我在后端声明“用户”——一切正常:

router.get('/user-orders', (req, res) => {
  const user = 'admin';
  Order.find({ "userData.email": user }, (error, order) => {
    if (error) {
      console.log(error);
    } else {
      return res.json({ order });
    }
  })
})

enter image description here

但我必须从前端发送字符串“admin”。如何解决?

编辑:

订购型号:

const orderSchema = new Schema({
    userData: {
        firstname: String,
        lastname: String,
        address: String,
        postcode: Object,
        city: String,
        country: String,
        email: String,
        phone: Number
    },
    items: {},
    shipping: String,
    sum: Number,
    created: {
        type: Date,
        default: Date.now()
    },
    status: {
        type:String,
        default: 'order_placed'
    }
});

最佳答案

我会更改您的路由器,以期望 url 中的用户 ID/电子邮件作为路径参数,然后该表达式将填充到 req.params

router.get('/user-orders/:id', (req, res) => {
   Order.find({ "userData.email": req.params.id}, (error, order) => { ... });
}

然后,在您的前端,您需要将 url 调整为:

userOrders(userIdOrEmail) {
   return this.http.get<User>(`${this.userOrdersUrl}/${userIdOrEmail}`);
}

关于javascript - Mongoose 错误 [CastError] : Cast to string failed for value "{}" at path "userData.email" for model "order",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65107645/

相关文章:

javascript - 使用动态上下文数据时如何用新的 React context api 替换旧的 React contextTypes?

javascript - 如何从常规 Javascript 函数访问 angularjs 常量

node.js - 如何更新字符串集 (SS) 类型的 Dynamodb 中的项目?

ajax - 无效的 JSON GET 请求 Express.js

javascript - Next.js - 当 Router.push() 或 getInitialProps() 完成时执行回调

javascript - UI-router 未路由到新模板

eclipse - NodeJS Eclipse V8 deb

javascript - Angular2 RC5导入第3方JS库: Showdown

angular - 如何从服务更改/控制按钮状态( bool 值)?

javascript - 使用 Angular 4 中的 ReactiveForms 使两个 FormControl 输入元素保持同步