【发布时间】:2022-01-09 03:58:54
【问题描述】:
我对 node 和 mongoose 还很陌生,我在使用 module.exports 时遇到了一些问题。在尝试使我的代码更干净的同时,我一直在尝试使用模块来获取 mongoDB 查询,因为它们占用了太多空间并且不容易阅读,但是我遇到了一个错误。
我在这里合并 2 个集合以获得结果,但 index.js 上的控制台告诉我未定义。当我在 operations.js 上执行 console.log 然后在索引上执行时,内部的控制台返回数组而不是外部的。
经过一番阅读,我发现这是因为我想要的值在承诺之内,但是我怎样才能得到它呢?
操作.js
const express = require('express')
const mongoose = require('mongoose')
const CheckOutOrder = require('../models/CheckOutOrder')
function ordersQuery(){
console.log('lol')
CheckOutOrder.aggregate([
{
$match:{
'is_open':1
}
},
{
$addFields:{
'itemToMatch':{
$toObjectId:'$idItem'
}
}
},
{
$lookup:{
from: 'e_menu_items',
localField: 'itemToMatch',
foreignField: '_id',
as: 'itemsReceipt'
}
},
{
$unwind:'$itemsReceipt'
}
]).then(info => {
console.log(info)
return info
}).catch(e => {
console.log('e')
return e
})
}
module.exports.totOrders = ordersQuery
index.js
const mongoQueries = require('../mongo/operations')
if(ActionDOM=='test'){
let orders = []
orders = mongoQueries.totOrders()
console.log('------------------------------------------------------')
console.log(orders)
}
控制台
lol
------------------------------------------------------
undefined
[
{
_id: new ObjectId("61da4036bc966b2a284e8075"),
idReceipt: 4,
idUser: '61d1606420f281d51d52e2e1',
idItem: '61d7f9205bda9c3be60b14ed',
is_open: 1,
date_added: 2022-01-09T01:53:58.017Z,
__v: 0,
itemToMatch: new ObjectId("61d7f9205bda9c3be60b14ed"),
itemsReceipt: {
_id: new ObjectId("61d7f9205bda9c3be60b14ed"),
menuItem: 'Molletes',
description: 'Frijoles, queso y salsa',
price: 18,
id_cat: 1,
is_active: 1,
date_added: 2022-01-07T08:26:08.990Z,
date_modified: 2022-01-07T08:26:08.990Z,
__v: 0
}
},
{
_id: new ObjectId("61da4036bc966b2a284e8079"),
idReceipt: 4,
idUser: '61d1606420f281d51d52e2e1',
idItem: '61d7f9205bda9c3be60b14ed',
is_open: 1,
date_added: 2022-01-09T01:53:58.128Z,
__v: 0,
itemToMatch: new ObjectId("61d7f9205bda9c3be60b14ed"),
itemsReceipt: {
_id: new ObjectId("61d7f9205bda9c3be60b14ed"),
menuItem: 'Molletes',
description: 'Frijoles, queso y salsa',
price: 18,
id_cat: 1,
is_active: 1,
date_added: 2022-01-07T08:26:08.990Z,
date_modified: 2022-01-07T08:26:08.990Z,
__v: 0
}
}
]
我做错了什么?
【问题讨论】:
-
你的
ordersQuery没有return任何东西。在该承诺链前面放置一个return关键字。 -
你不想
return e,你想在登录后重新throw。