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); 
    } 
}); 
+0

我很愚蠢。非常感谢。 – user6571640