2016-02-10 2 views
0

Вы знаете, как показать заголовок & контент для всех заметок Evernote в Express js? https://github.com/evernote/evernote-sdk-js/blob/master/sample/express/routes/index.jshttps://github.com/evernote/evernote-sdk-js/blob/master/sample/express/views/index.jadeКак показать название каждой заметки Evernote в Express js?

500 ТипError: C: \ Users \ lvcpp \ Docs \ evernote-sdk-js \ sample \ express \ views \ index.jade: 31 29 | li = session.notebooks [i] .name 30 | ul> 31 | - для (var i = 0; i < session.notesMeta.length; ++ i) 32 | li = session.notesMeta.notes [i] .title 33 | hr 34 | h2 Текущее состояние Невозможно прочитать значение «длины» не определено

29 | li = session.notebooks [i] .name
30 | ul
> 31 | - для (var i = 0; i < session.notesMeta.length; ++ i)
32 | li = session.notesMeta.notes [i] .title
33 | hr
34 | h2 Текущий статус


Экспресса веб-приложение расслоение плотной:

//index.js:
...

exports.index = function(req, res) { 
    if(req.session.oauthAccessToken) { 
    var token = req.session.oauthAccessToken; 
    var client = new Evernote.Client({ 
     token: token, 
     sandbox: config.SANDBOX 
    }); 
    var noteStore = client.getNoteStore(); 
    noteStore.listNotebooks(function(err, notebooks){ 
     req.session.notebooks = notebooks; 
     res.render('index'); 
    }); 

    var notebook=noteStore.getDefaultNotebook(function (err, notebook){ 
     filter = new Evernote.NoteFilter(); 
     filter.notebookGuid = notebook.guid; 
     resultSpec = new Evernote.NotesMetadataResultSpec(); 
     resultSpec.includeTitle=true; 
     noteStore.findNotesMetadata(filter, 0, 100, resultSpec, function(err, notesMeta) { 
     req.session.notes = notes; 
     res.render('index'); 
     }); 
    }); 

    } else { 
    res.render('index'); 
    } 
}; 

// index.jade
...

ul 
    - for (var i = 0; i < session.notebooks.length; ++i) 
    li= session.notebooks[i].name 
ul 
    - for (var i = 0; i < session.notesMeta.length; ++i) 
    li= session.notesMeta.notes[i].title 

p.s. Thanks, @conch,
but unfortunately I get another error, after the fixes of code:

500 TypeError: C:\Users\lvcpp\Docs\evernote-sdk-js\sample\express\views\index.jade:31 29| li= session.notebooks[i].name 30| ul > 31| - for (var i = 0; i < session.notesMeta.notes.length; ++i) 32| li= session.notesMeta.notes[i].title 33| hr 34| h2 Current status Cannot read property 'notes' of undefined

29| li= session.notebooks[i].name
30| ul
> 31| - for (var i = 0; i < session.notesMeta.notes.length; ++i)
32| li= session.notesMeta.notes[i].title
33| hr
34| h2 Current status

Нам нужно определить свойство «notes» в index.js.

Но как это сделать, или нам действительно нужно иметь дело?

В моей консоли nodejs приложения все, что работает без специального определения нот:

function showlistNotes() { 
    filter = new Evernote.NoteFilter(); 
    resultSpec = new Evernote.NotesMetadataResultSpec(); 
    resultSpec.includeTitle=true; 

    noteStore.findNotesMetadata(filter, 0, 100, resultSpec, function(err, notesMeta) { 
    if (err) { 
     console.error('err',err); 
    } 
    else { 
     console.log("\nFound "+notesMeta.notes.length+" notes in all the notebooks:"); 

     for (var i in notesMeta.notes) { 
      console.log(i+": "+notesMeta.notes[i].title); 
     } 

     console.log('\nGet the contents of the selected note (see full list of notes, from all your notebooks):\nPlease insert the number from 0 to ' + notesMeta.notes.length); 
     process.openStdin().addListener("data", function(d) { 
     var a=d.toString().trim(); 
     noteStore.getNote(notesMeta.notes[a].guid, true, true, true, true, function(err, note) { 
      console.log(err || ENML.PlainTextOfENML(note.content, note.resources) ); 
     }); 
     }); 
    } 
    }); 
} 
+0

По трассировки стека, которые выравнивают точно не удается? – akhaku

+0

Я продлил описание ошибки и выделил наиболее важные части, см. Обновленный пост. session.notesMeta не определено. Я исправил это, но получаю еще одну ошибку, см. Ниже. – lvcpp

ответ

1

Это неисправного потому, что ваш файл JS устанавливает переменную сеанс с именем notes в обратном вызове noteStore.findNotesMetadata, но ваш нефрит файл ожидает переменную сеанса, которая называется notesMeta. Ваш нефритовый файл также имеет ошибку индексирования (вам не следует выполнять итерацию через session.notesMeta, вы должны выполнять итерацию через session.notesMeta.notes).

Правильный код:

index.js

noteStore.findNotesMetadata(filter, 0, 100, resultSpec, function(err, notesMeta) { 
    req.session.notesMeta = notesMeta; 
    res.render('index'); 
}); 

index.jade

ul 
    - for (var i = 0; i < session.notesMeta.notes.length; ++i) 
    li= session.notesMeta.notes[i].title 
+0

@lvcpp Что вы видите, если вы распечатываете результаты «noteStore.findNotesMetadata» в обратном вызове? – conch

+0

Я вижу Не могу прочитать свойство «findNotesMetadata» неопределенного – lvcpp

+0

, но, конечно, оригинальные образцы [index.js] (https://github.com/evernote/evernote-sdk-js/blob/master/sample/express /routes/index.js) [index.jade] (https://github.com/evernote/evernote-sdk-js/blob/master/sample/express/views/index.jade) работает правильно (отображает список ноутбуков и т. д.) – lvcpp

Смежные вопросы