Почему свойство `email` моего объекта json не отображается в моем шаблоне jade? - PullRequest
1 голос
/ 02 апреля 2012

С самой странной проблемой. Я не могу отобразить свойство email объекта. Я использую Mongoose / Express / Jade. Я делаю:

User.find({ _id : { $in : req.project.subscribers } } , function (err, subs){...

, который работает просто отлично и возвращает список моих подписчиков в sub var, который выглядит так:

{ _id: 4f34832b9398bec847000002,
  email: 'steve@example.com',
  first_name: 'Steve',
  last_name: 'McQueen',
  status: 'active',
  username: 'steve',
  updated_at: Fri, 10 Feb 2012 02:38:35 GMT,
  created_at: Fri, 10 Feb 2012 02:38:35 GMT,
  role: 'subscriber' },

  { _id: 4f3484a9eceb82b548000002,
  email: 'paul@example.com',
  first_name: 'Paul',
  last_name: 'Stanley',
  status: 'active',
  username: 'paul',
  updated_at: Mon, 02 Apr 2012 15:09:56 GMT,
  created_at: Mon, 02 Apr 2012 15:09:56 GMT,
  role: 'subscriber' }

Затем я передаю это своему нефритовому представлению в var, называемом подписчиками. Хорошо, что проблема возникает, когда я хочу отобразить свойство email каждого подписчика, когда я повторяю значение subscribers в своем нефритовом шаблоне. Это проблема только с email по некоторым причинам! Для email ничего не отображается, просто пусто.

ul
  each sub in subscribers
    li= sub.email

Это прекрасно работает, если я заменю ЛЮБОЙ из других свойств вместо email. Таким образом, следующие изображения отображаются отлично:

ul
  each sub in subscribers
    li= sub.username

Пожалуйста, дайте мне знать, если я могу предоставить более подробную информацию.

РЕДАКТИРОВАТЬ для Declan:

Выполнение следующих действий:

ul
    each val, key in subscribers
     li #{key}: #{val}

Урожайность:

    0: { _id: 4f34832b9398bec847000002, email: 'foo', first_name: 'Steve', last_name: 
'McQueen', status: 'active', username: 'steve', updated_at: Fri, 10 Feb 2012 02:38:35 GMT, 
created_at: Fri, 10 Feb 2012 02:38:35 GMT, role: 'subscriber' }

1: { _id: 4f3484a9eceb82b548000002, email: 'foo', first_name: 'Paul', last_name: 'Stanley', 
status: 'active', username: 'paul', updated_at: Mon, 02 Apr 2012 16:05:51 GMT, created_at: 
Mon, 02 Apr 2012 16:05:51 GMT, role: 'subscriber' }

Ответы [ 3 ]

5 голосов
/ 03 апреля 2012

Я отвечаю на свой вопрос, потому что он оказался глупым и очевидным (обычно так, не правда ли?).

При использовании mongoose и свойства не отображаются, убедитесь, чточто у вас есть это свойство, определенное в вашей схеме mongoose.Так или иначе, я пропустил поле электронной почты, когда создал свою схему, и она просто не была определена.Даже при том, что это было в реальной записи в БД, mongoose не заботится и покажет вам только то, что вы определили для объекта / схемы.

Спасибо всем за ваши усилия, если ничего больше,ты помог мне добраться до моего ответа.

1 голос
/ 02 апреля 2012

публикация в качестве ответа для лучшего форматирования кода.

Я только что вернулся домой и собрал тестовое приложение, чтобы посмотреть, смогу ли я продублировать вашу ошибку.До сих пор я не смог.Вот мои файлы

Примечание: я не использую базу данных для тестирования, поэтому проблема может заключаться в том, как вы получаете данные из базы данных в шаблон:

index.jade

ul
  each sub in subscribers
    li= sub.email

route / index.js

exports.index = function(req, res){
  res.render('index', { subscribers: [{ "_id": "4f34832b9398bec847000002",  "email": "steve@example.com",  "first_name": "Steve",  "last_name": "McQueen",  "status": "active",  "username": "steve",  "updated_at": "Fri, 10 Feb 2012 02:38:35 GMT",  "created_at": "Fri, 10 Feb 2012 02:38:35 GMT",  "role": "subscriber" },  { "_id": "4f3484a9eceb82b548000002",  "email": "paul@example.com",  "first_name": "Paul",  "last_name": "Stanley",  "status": "active",  "username": "paul",  "updated_at": "Mon, 02 Apr 2012 15:09:56 GMT",  "created_at": "Mon, 02 Apr 2012 15:09:56 GMT",  "role": "subscriber" }] })
};

app.js

var express = require('express')
  , routes = require('./routes');

var app = module.exports = express.createServer();

// Configuration

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes

app.get('/', routes.index);

app.listen(8000);
console.log("Express server listening on port %d in %s mode", app.address().port, app.settings.env);

Не могли бы вы опубликовать в вашем маршруте / app.get функцию, которая будет также обрабатывать весь код базы данных?

0 голосов
/ 02 апреля 2012

Нефрит выглядит правильным для меня, возможно, это что-то в вашем обработчике запросов с тем, как вы добавляете его в представление, которое будет отображаться.Этот простой пример работает:

обработчик запросов на стороне сервера ...

app.get('/', function(req, res) {
    var users = [{
        _id: '4f34832b9398bec847000002',
        email: 'steve@example.com',
        first_name: 'Steve',
        last_name: 'McQueen',
        status: 'active',
        username: 'steve',
        updated_at: "Fri, 10 Feb 2012 02:38:35 GMT",
        created_at: "Fri, 10 Feb 2012 02:38:35 GMT",
        role: 'subscriber'
    }, {
        _id: '4f3484a9eceb82b548000002',
        email: 'paul@example.com',
        first_name: 'Paul',
        last_name: 'Stanley',
        status: 'active',
        username: 'paul',
        updated_at: "Mon, 02 Apr 2012 15:09:56 GMT",
        created_at: "Mon, 02 Apr 2012 15:09:56 GMT",
        role: 'subscriber'
    }];
    res.render('index.jade', {subscribers : users });
});

содержимое файла index.jade ...

html
    body
        ul
            each sub in subscribers
                li= sub.email

, который выводит ...

<html>
    <body>
        <ul>
            <li>steve@example.com</li>
            <li>paul@example.com</li>
        </ul>
    </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...