MillerApps
MillerApps

Reputation: 152

Keystone js findOne returning null

I am using KeystoneJS version 4.0.0-beta.5 and I am trying to load some data from one of my models which is returning null for some reason. I am able to load the data for all my other models, but this one is a bit tricker or I am overlooking something. Any and all help would be greatly appreciated.

Node version: 6.11.2

Model code

var keystone = require('keystone');
var Types = keystone.Field.Types;

var Event = new keystone.List('Event', {
    autokey: {
        path: 'slug',
        from: 'title',
        unique: true
    },
    map: {
        name: 'title'
    }
});

Event.add({
    title: {
        type: String,
        required: true
    },
    info: {
        type: Types.Html,
        wysiwyg: true,
        height: 300
    },
  form: {
    type: Types.Boolean
  }
});

Event.defaultColumns = 'title';
Event.register();

Route/View Code

var keystone = require('keystone');

exports = module.exports = function (req, res) {

    var view = new keystone.View(req, res);
    var locals = res.locals;

    // Set locals
    locals.section = 'event';
    locals.filters = {
        detail: req.params.detail,
    };
    locals.data = {
        details: [],
    };

  // load event data
    view.on('init', function (next) {

        var q = keystone.list('Event').model.findOne({
            slug: locals.filters.detail,

        })

        q.exec(function (err, result) {
            locals.data.detail = result;
      console.log(result);
            next(err);
        });

    });

    // Render the view
    view.render('detail');
};

Upvotes: 0

Views: 564

Answers (2)

MillerApps
MillerApps

Reputation: 152

It turns out I had a typo in routes/index.js.

Edit: I believe I just forgot to add this to routes/index.js.

app.get('/event', routes.views.event);
app.get('/event/detail/:detail', routes.views.detail);

Upvotes: 1

Steve Holgado
Steve Holgado

Reputation: 12089

You have a typo.

You are setting locals.data.details here:

locals.data = {
    details: [],
};

...but are saving your result into locals.data.detail here:

q.exec(function (err, result) {
    locals.data.detail = result;
    console.log(result);
    next(err);
});

Upvotes: 0

Related Questions