在使用" generator-angular-fullstack"创建的项目中,如何过滤列表项(在服务器端)?

时间:2016-02-06 21:21:04

标签: angularjs mongodb bluebird angular-fullstack

我正在使用generator-angular-fullstack

npm install -g generator-Angular-Fullstack@3.2.0

使用设置创建项目: 开箱即用我用Express服务器创建一个AngularJS应用程序。

客户端

?你想用标记写什么?的 HTML ?你想用什么写样式表?的 CSS ?你想使用什么Angular路由器?的 uiRouter ?你想包括Bootstrap吗? ?你想要包含UI Bootstrap吗?的

服务器

?您想用什么来进行数据建模? 猫鼬(MongoDB) ?你会建立一个认证样板吗? ?您想要包含其他oAuth策略吗? Facebook,Twitter ?你想使用socket.io吗?的

项目

?你想用什么写测试? (使用箭头键)?的茉莉

我创建了新的端点"预订":

yo angular-fullstack:endpoint reservation       //Server side
yo angular-fullstack:route reservatios //Client Route

更新了新页面的填充和#34;预留"名单。 但它得到了所有" Reservation"项目。

我想在用户isAdmin时获得所有预订。 在其他情况下(非用户或简单用户)我希望只获得有效的预订。

所以有简单的预订模式:

var ReservationSchema = new Schema({
   date: {
    type: Date,
    required: true
  }
  //,user: {
  //  type : Schema.ObjectId,
  //  ref : 'User'
  //}
});

预订已激活,当"新日期()" < reservatio.date。

所以有这些服务器端控制器: server \ api \ reservation \ reservation.controller.js

这些方法如下:

// Gets a list of Reservations
export function index(req, res) {
  Reservation.findAsync()
    .then(responseWithResult(res))
    .catch(handleError(res));
}

所以我为ActiveReservations创建了另一个函数:

// Gets a list of Active Reservations
export function active(req, res) {
  Reservation.findAsync()
    .then(getOnlyActive(res))
    .then(responseWithResult(res))
    .catch(handleError(res));
}

所以我添加了这个自定义功能" getOnlyActive(res)"。

我的问题: 应该在该功能中,如何过滤" res",以获得仅有效预订?我认为过滤应该在这里完成。更正我的并指出正确的批准如何从mongoDB获取过滤的项目(使用mongoose)。

1 个答案:

答案 0 :(得分:0)

最后找出如何进行过滤:)...

在示例中,这是我的模型(server \ api \ reservation \ reservation.model.js):

var mongoose = require('bluebird').promisifyAll(require('mongoose'));
var Schema = mongoose.Schema;
var ReservationSchema = new Schema({
  date: {
    type: Date,
    required: true
  }
});

export default mongoose.model('Reservation', ReservationSchema);

我添加了新的静态功能:

ReservationSchema.statics.findActive = function (next) {
    return this.find({"date": {"$gte": new Date()}});
};

然后将新功能添加到预约控制器(server \ api \ reservation \ reservation.controller.js)

// Gets a list of Active Reservations
export function active(req, res) {
    Reservation.findActive()
    .execAsync()
    .then(responseWithResult(res))
    .catch(handleError(res));
}

最后添加了有效预订的路由(server \ api \ reservation \ index.js):

router.get('/active', controller.active);

现在它可以工作:)。通过在浏览器中调用来检查:

http://localhost:9000/api/reservations //获取所有预订 http://localhost:9000/api/reservations/active //仅获取有效预订 - 使用" reservation.date>新的日期()"。