如何将数组添加到MEAN.JS中的javascript服务器端模型

时间:2016-01-17 18:08:12

标签: javascript arrays node.js mean-stack

我正在使用MEAN.JS,我已经为项目创建了一个模块。我想为这些项目添加任务,我想用多维数组来完成。我希望数组包含一个task.description和一个任务都是字符串的task.status。我想我理解项目的客户端部分,我知道还有其他文件。但是,我相信这会让问题变得尽可能简单,因为我正努力在本网站上开发我的个人资料。然而,我将包含controller.js,所以我可以使这个工作,并希望得到正确的答案。

project.server.model.js

'use strict';

/**
 * Module dependencies.
 */
var mongoose = require('mongoose'),
  Schema = mongoose.Schema;

/**
 * Project Schema
 */
var ProjectSchema = new Schema({
  created: {
    type: Date,
    default: Date.now
  },
  title: {
    type: String,
    default: '',
    trim: true,
    required: 'Title cannot be blank'
  },
  description: {
    type: String,
    default: '',
    trim: true
  },
  /* MODEL for TASK ARRAY*/
  task: {

  },
  user: {
    type: Schema.ObjectId,
    ref: 'User'
  }
});

mongoose.model('Project', ProjectSchema);

projects.server.controller.js

'use strict';

/**
 * Module dependencies.
 */
var path = require('path'),
  mongoose = require('mongoose'),
  Project = mongoose.model('Project'),
  errorHandler = require(path.resolve('./modules/core/server/controllers/errors.server.controller'));

/**
 * Create a project
 */
exports.create = function (req, res) {
  var project = new Project(req.body);
  project.user = req.user;

  project.save(function (err) {
    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      res.json(project);
    }
  });
};

/**
 * Show the current project
 */
exports.read = function (req, res) {
  res.json(req.project);
};

/**
 * Update a project
 */
exports.update = function (req, res) {
  var project = req.project;

  project.title = req.body.title;
  project.description = req.body.description;

  project.save(function (err) {
    if (err) {
      return res.status(400).send({
        message: errorHandler.getErrorMessage(err)
      });
    } else {
      res.json(project);
    }
  });
};

编辑project.client.view.html

<section ng-controller="ProjectsController" ng-init="findOne()">
  <div class="page-header">
    <h1>Edit Project</h1>
  </div>
  <div class="col-md-12">
    <form name="projectForm" class="form-horizontal" ng-submit="update(projectForm.$valid)" novalidate>
      <fieldset>
        <div class="form-group" show-errors>
          <label for="title">Title</label>
          <input name="title" type="text" ng-model="project.title" id="title" class="form-control" placeholder="Title" required>
          <div ng-messages="projectForm.title.$error" role="alert">
            <p class="help-block error-text" ng-message="required">Project title is required.</p>
          </div>
        </div>

        <div class="form-group">
          <label for="description">Description</label>
          <textarea name="description" ng-model="project.description" id="description" class="form-control" cols="30" rows="4" placeholder="Description"></textarea>
        </div>

        <div class="form-group">
          Task Description
          <textarea name="description" ng.model="project.task.description" class="form-control" cols="30" rows="3" placeholder="Description"></textarea>
          <div>
            Task Status
            <input name="status" ng.model="project.task.status" class="form-control" placeholder="Status">  
          </div>  
        </div>

        <div class="form-group">
          <input type="submit" value="Update" class="btn btn-default">
        </div>
        
        <div ng-show="error" class="text-danger">
          <strong ng-bind="error"></strong>
        </div>
      </fieldset>
    </form>
  </div>
</section>

2 个答案:

答案 0 :(得分:0)

首先,创建一个引用项目的任务模型(task.server.model.js)

var TaskSchema = new mongoose.Schema({
    description: String,
    status: String,
    // referencing Project model
    project: { type: mongoose.Schema.Types.ObjectId, ref: 'Project' }
});

然后在Project模型参考任务中 //将其添加到项目架构定义

tasks: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Task' }]

答案 1 :(得分:0)

它应该

var mongoose = require('mongoose'),
    Schema = mongoose.Schema;

/**
 * Task Schema 
 */
var TaskSchema = new Schema({
    description: String,
    status: String,
    project: {
        type: Schema.ObjectId,
        ref: 'Project'
    }
});

希望它对你有所帮助!