Express.js在发生器内部发生错误时继续加载和加载
问题描述:
我注意到虽然发生器内部有错误,但express.js在不停止处理的情况下继续处理。所以,我无法找到实际的错误。我的问题是:如何在发生器出现错误时停止express.js并输出错误。Express.js在发生器内部发生错误时继续加载和加载
我的代码
Controller.js
const mongoose = require('mongoose');
const {wrap: async} = require('co');
const Post = require('../models/Post');
//.... there are more modules.
const getPosts = async(function* (req, res) {
const page = (req.query.page > 0 ? req.query.page : 1) - 1;
const limit = 5;
const options = {
limit: limit,
page: page
};
const posts = yield Post.list(options);
const count = yield Post.count();
console.log(posts);
res.render('posts/index', {
title: 'Home',
posts: posts,
page: page + 1,
pages: Math.ceil(count/limit)
});
});
app.get('/', getPosts);
Post.js
//.. more codes
postSchema.static.list = function (options) {
const criteria = options.criteria || {};
const page = options.page || 0;
const limit = options.limit || 30;
return this.find(criteria)
.populate('user', 'name userlogin profile email')
.sort({ createdAt: -1 })
.limit(limit)
.skip(limit * page)
.exec();
};
答
有一个在Post.js.一个错字postSchema.static.list
应该是postSchema.statics.list
(静态不是静态的)。
尝试包装yield
里面试试。
const getPosts = async(function* (req, res, next) {
const page = (req.query.page > 0 ? req.query.page : 1) - 1;
const limit = 5;
const options = {
limit: limit,
page: page
};
try {
const posts = yield Post.list(options);
const count = yield Post.count();
console.log(posts);
res.render('posts/index', {
title: 'Home',
posts: posts,
page: page + 1,
pages: Math.ceil(count/limit)
});
}catch(err){
next(err);
}
});
我很愚蠢。非常感谢。 – user6571640