iRo*_*tia 1 javascript asynchronous mongodb node.js promise
我正在上斯蒂芬·格林德(Stephen Grinder)的高级NodeJS课程,我们在Redis中测试了缓存。
当我运行我的应用程序并到达给定的路线时,我被抛出此错误
弃用警告:猫鼬:mpromise(猫鼬的默认诺言库)已过时,请插入您自己的诺言库:http ://mongoosejs.com/docs/promises.html
另一个看起来像这样
UnhandledPromiseRejectionWarning:未处理的承诺拒绝。该错误是由于在没有catch块的情况下抛出异步函数而引起的,或者是由于拒绝了未经.catch()处理的诺言而引起的。(拒绝ID:1)[0](节点:11896)[DEP0018] DeprecationWarning:已弃用未处理的承诺拒绝。将来,未处理的承诺拒绝将以非零的退出代码终止Node.js进程。[0]来自MongoDb的服务
现在,如前所述,我经过了非常模糊的审视,似乎他们的文档中没有谈论异步和等待。
这是api路线引发错误
app.get('/api/blogs', requireLogin, async (req, res) => {
const redis = require('redis')
const redisURL = 'redis://127.0.0.1:6379';
const client = redis.createClient(redisURL);
const util = require('util')
client.get = util.promisify(client.get)
const cachedBlog = await client.get(req.user.id)
if (cachedBlog) return res.send(JSON.parse(cachedBlogs))
console.log("serving from MongoDb")
const blogs = await Blog.find({_user: req.user.id})
client.set(req.user.id, JSON.parse(blogs))
res.send(blogs);
});
Run Code Online (Sandbox Code Playgroud)
具体来说这行
const blogs = await Blog.find({_user: req.user.id})
Run Code Online (Sandbox Code Playgroud)
哪里
const Blog = mongoose.model('Blog');
Run Code Online (Sandbox Code Playgroud)
注意:为了简略地解释缓存,Stephen Grinder特意将其设置在根目录内。
[问题:]有人可以告诉我如何使用异步/等待(例如我目前在路由内所做的操作)而不会引发任何错误吗?
这里有两个问题。
1:您没有设置对猫鼬的承诺。所以设置它。
mongoose.Promise = global.Promise
Run Code Online (Sandbox Code Playgroud)
2:当您使用异步/等待时,则需要将代码包装在try / catch块中。
try {
// your code
} catch(e) {
console.log(e);
}
Run Code Online (Sandbox Code Playgroud)
在您的情况下,代码应如下所示。
app.get('/api/blogs', requireLogin, async (req, res) => {
try {
const redis = require('redis')
const redisURL = 'redis://127.0.0.1:6379';
const client = redis.createClient(redisURL);
const util = require('util')
client.get = util.promisify(client.get)
const cachedBlog = await client.get(req.user.id)
if (cachedBlog) return res.send(JSON.parse(cachedBlogs))
console.log("serving from MongoDb")
const blogs = await Blog.find({_user: req.user.id})
client.set(req.user.id, JSON.parse(blogs))
res.send(blogs);
} catch(e) {
console.log(e);
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2681 次 |
| 最近记录: |