【发布时间】:2021-06-08 22:18:21
【问题描述】:
我目前正在执行GET 请求,该请求使用我编写的一堆方法来查询数据库并显示它们。这很好用,但我想让它成为POST 请求方法,以便这些方法不必依赖于req.query,处理 json 正文而不是 URL 参数字符串,这将有助于 url 字符串不除了端点之外还有其他任何东西,并使其尽可能动态。知道怎么做吗?
这是我的控制器方法:
exports.getBooks = async (req, res, next) => {
const bookList = new BookList(Book.find(), req.query)
.filter()
.sort()
.paginate();
const books = await bookList.query;
res.status(200)
.json({
books,
});
};
这是拥有所有方法的 BookList 类:
class BookList {
constructor(query, queryString) {
this.query = query;
this.queryString = queryString;
}
filter() {
const queryObj = { ...this.queryString };
const excludedFields = ['page', 'sort', 'limit', 'fields'];
excludedFields.forEach(el => delete queryObj[el]);
let queryStr = JSON.stringify(queryObj);
this.query = this.query.find(JSON.parse(queryStr));
return this;
}
sort() {
if (this.queryString.sort) {
const sortBy = this.queryString.sort.split(',').join(' ');
this.query = this.query.sort(sortBy);
} else {
this.query = this.query.sort('-createdAt');
}
return this;
}
paginate() {
const page = Number(this.queryString.page) || 1;
const limit = Number(this.queryString.limit) || 100;
const skip = (page - 1) * limit;
this.query = this.query.skip(skip).limit(limit);
return this;
}
}
module.exports = BookList;
【问题讨论】:
标签: javascript node.js mongodb express http-method