Mongoose QueryStream 和请求模块
Mongoose QueryStream and Request Module
在
等模型上执行 QueryStream 时
User.find({}).stream().on('data', (user) => {
request.post(someOptions, (error, response, body) => {
if(!error && response.statusCode === 200) {
user.someProperty = body.newValue;
user.save((err) => {
if (err) console.log(err)
});
} else {
console.log(error);
console.log(response);
}
}).on('end', () => {
console.log('all users have new values');
});
我正在接收结束事件的控制台输出,然后收到一个错误:
all users have new values
TypeError: user.save is not a function
at Request._callback
我假设这意味着 request.post 函数 运行 太多次了,因为我试图在没有流的情况下做到这一点,只是
.find({} (err, users) => {
for(user in users) {
request.post...
}
});
但这从我发布的 api 返回了一个错误的状态代码,因为 request.post()
在我传递的选项中发送了一个 undefined
值来自用户文档,即使所有文档都有定义的值。虽然,我没有收到 save 不是函数的错误。
任何人都可以阐明正在发生的事情吗?
这是一个简化版本,假设您不需要 stream
(应该换成 cursor
)并且您有 request-promise-native
可用
const users = await User.find().exec()
for(let user of users) {
const body = await request.post(someOptions)
if(body) {
user.someProperty = body.newValue
await user.save()
}
}
从代码看来,您正在制作相同的 post
并更新每个 user
的相同值。如果是这样,为什么不呢:
const body = await request.post(someOptions)
if(body) {
await User.update(
{ },
{ $set: { someProperty: body.newValue } },
{ multi: true }
)
}
在
等模型上执行 QueryStream 时User.find({}).stream().on('data', (user) => {
request.post(someOptions, (error, response, body) => {
if(!error && response.statusCode === 200) {
user.someProperty = body.newValue;
user.save((err) => {
if (err) console.log(err)
});
} else {
console.log(error);
console.log(response);
}
}).on('end', () => {
console.log('all users have new values');
});
我正在接收结束事件的控制台输出,然后收到一个错误:
all users have new values
TypeError: user.save is not a function
at Request._callback
我假设这意味着 request.post 函数 运行 太多次了,因为我试图在没有流的情况下做到这一点,只是
.find({} (err, users) => {
for(user in users) {
request.post...
}
});
但这从我发布的 api 返回了一个错误的状态代码,因为 request.post()
在我传递的选项中发送了一个 undefined
值来自用户文档,即使所有文档都有定义的值。虽然,我没有收到 save 不是函数的错误。
任何人都可以阐明正在发生的事情吗?
这是一个简化版本,假设您不需要 stream
(应该换成 cursor
)并且您有 request-promise-native
可用
const users = await User.find().exec()
for(let user of users) {
const body = await request.post(someOptions)
if(body) {
user.someProperty = body.newValue
await user.save()
}
}
从代码看来,您正在制作相同的 post
并更新每个 user
的相同值。如果是这样,为什么不呢:
const body = await request.post(someOptions)
if(body) {
await User.update(
{ },
{ $set: { someProperty: body.newValue } },
{ multi: true }
)
}