Javascript Sails JS-如何使用关联控制器中的特定模型属性

Javascript Sails JS-如何使用关联控制器中的特定模型属性,javascript,node.js,model,controller,sails.js,Javascript,Node.js,Model,Controller,Sails.js,我正在学习Javascript、Node和Sails,还有一个基本的新问题(我想),我在别处找不到答案 在控制器中,我尝试访问特定的模型属性,然后创建一个数组,其中包含每个单独的条目,以便在视图中使用。虽然我可以在菜单/索引视图中访问模型中的记录,但似乎无法直接处理模型中的任何特定属性 以下是有问题的控制器代码: var MenuController = module.exports = { manager: function(req, res) { var userId = req.sess

我正在学习Javascript、Node和Sails,还有一个基本的新问题(我想),我在别处找不到答案

在控制器中,我尝试访问特定的模型属性,然后创建一个数组,其中包含每个单独的条目,以便在视图中使用。虽然我可以在菜单/索引视图中访问模型中的记录,但似乎无法直接处理模型中的任何特定属性

以下是有问题的控制器代码:

var MenuController = module.exports = {

manager: function(req, res) {
var userId = req.session.user.id;

sails.log("Searching for foods for user: "+ userId);
Menu.find({ where: { userId: { equals: userId }}}).exec(function(err, records) {
    if(records && records.length == 0) {
      sails.log("No foods found for user: " + userId);
      sails.log(err);
      return res.view("menu/index");
    } else {
          var foodCategories = records.food_category;
          sails.log(foodCategories);
          var array = foodCategories.split(',');
          var foodCatArray = [];
          for (i = 0; i < array.length; i++) {
            foodCatArray.push(array[i].toUpperCase());
            var uniqueCats = foodCatArray.filter(function (item, i, ar) {
              return ar.indexOf(item) === i;
            });
            var sortedCats = uniqueCats.sort();
            sails.log(sortedCats);
          }
          return res.view("menu/index", {foods: records, sortedCats: sortedCats});
        }
      });
},
var Menu =  module.exports = {
attributes: {
userId: {
  required: true,
  type: 'integer',
  min: 1
},
food_category: {
  type: "string",
  required: false,
  min: 1,
  max: 200
},
food_name: {
  type: "string",
  required: true,
  min: 1,
  max: 200
},
food_cost: {
  type: "string",
  required: true,
  min: 1,
  max: 10
},
food_description: {
  type: "string",
  required: true
},
img_path: {
  type: "string",
  required: true
},
img_name: {
  type: "string",
  required: true
},
img_name_crypt: {
  type: "string",
  required: true
}
}
};
现在这一行:

var foodCategories = records.food_category; 

加载菜单/索引视图时,在我的Sails日志中创建一个未定义的值。有人能给我指出正确的方向吗?

您的记录变量很可能是对象数组

将代码移到for循环中,并像这样使用它

records[i].food_category
您不需要var数组。。。
在for-loop use records.lenght中使用records.lenght

非常感谢Molda在正确的方向上轻轻推了我一下

以下是最终为我工作的Sails控制器代码:

var MenuController = module.exports = {

manager: function(req, res) {
  var userId = req.session.user.id;
  sails.log("Searching for foods for user: "+ userId);
  Menu.find({ where: { userId: { equals: userId }}}).exec(function(err, records) {
   if(records && records.length == 0) {
    sails.log("No foods found for user: " + userId);
    sails.log(err);
    return res.view("menu/index");
   } else {
    var foodCatArray = [];
      for (i = 0; i < records.length; i++) {
        var foodCategories = records[i].food_category;
        foodCatArray.push(foodCategories);
      }
    var uniqueCats = foodCatArray.filter(function (item, i, ar) {
      return ar.indexOf(item) === i;
    });
    uniqueCats.sort();
    sails.log(uniqueCats);
    sails.log("Returning " + records.length + " foods found for user: " + userId);
    return res.view("menu/index",{ foods: records, foodCats:uniqueCats });
  }
 });
},
var MenuController=module.exports={
经理:功能(请求、恢复){
var userId=req.session.user.id;
日志(“为用户搜索食物:“+userId”);
Menu.find({where:{userId:{equals:userId}}}).exec(函数(err,records){
if(records&&records.length==0){
log(“没有为用户找到食物:“+userId”);
航海日志(err);
返回res.view(“菜单/索引”);
}否则{
var foodCatArray=[];
对于(i=0;i

此代码循环遍历用户菜单项中每个食物项上的每个食物类别字符串,将其添加到数组中,然后通过数组进行排序,消除重复项并按字母顺序对数组进行排序。在我看来,我可以使用“foodCats”获取此数组并对其执行我需要的任何操作。

谢谢Molda!我会尝试一下。这让我明白了这一点。在添加了您建议的位后,我最终重写了许多糟糕的Javascript,并能够像我希望的那样获得数组输出。我将发布我的最终控制器Javascript。