Enviar pesquisa
Carregar
The NERD stuff - opening for Domino to the modern web developer
•
3 gostaram
•
654 visualizações
Oliver Busse
Seguir
Presentation from Engage 2019 at AutoWorld in Brussels by Jan Krejcarek & Oliver Busse
Leia menos
Leia mais
Software
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 49
Baixar agora
Baixar para ler offline
Recomendados
Nagios Conference 2011 - Nathan Vonnahme - Integrating Nagios With Test Drive...
Nagios Conference 2011 - Nathan Vonnahme - Integrating Nagios With Test Drive...
Nagios
Nagios Conference 2012 - Mike Weber - NRPE
Nagios Conference 2012 - Mike Weber - NRPE
Nagios
Introduction to node.js By Ahmed Assaf
Introduction to node.js By Ahmed Assaf
Ahmed Assaf
Node js
Node js
Chirag Parmar
Артем Маркушев - JavaScript
Артем Маркушев - JavaScript
DataArt
Abhishek_Kumar
Abhishek_Kumar
Abhishek Kumar
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon
Day in a life of a node.js developer
Day in a life of a node.js developer
Edureka!
Recomendados
Nagios Conference 2011 - Nathan Vonnahme - Integrating Nagios With Test Drive...
Nagios Conference 2011 - Nathan Vonnahme - Integrating Nagios With Test Drive...
Nagios
Nagios Conference 2012 - Mike Weber - NRPE
Nagios Conference 2012 - Mike Weber - NRPE
Nagios
Introduction to node.js By Ahmed Assaf
Introduction to node.js By Ahmed Assaf
Ahmed Assaf
Node js
Node js
Chirag Parmar
Артем Маркушев - JavaScript
Артем Маркушев - JavaScript
DataArt
Abhishek_Kumar
Abhishek_Kumar
Abhishek Kumar
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon
Day in a life of a node.js developer
Day in a life of a node.js developer
Edureka!
Day In A Life Of A Node.js Developer
Day In A Life Of A Node.js Developer
Edureka!
PHP QA Tools
PHP QA Tools
rjsmelo
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
leffen
Zend Framework Foundations
Zend Framework Foundations
Chuck Reeves
MeaNstack on Docker
MeaNstack on Docker
Daniel Ku
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Aleksey Asiutin
SWT Tech Sharing: Node.js + Redis
SWT Tech Sharing: Node.js + Redis
Infinity Levels Studio
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf Conference
NodeJS : Communication and Round Robin Way
NodeJS : Communication and Round Robin Way
Edureka!
"JavaME + Android in action" CCT-CEJUG Dezembro 2008
"JavaME + Android in action" CCT-CEJUG Dezembro 2008
Vando Batista
Zend Framework 2 quick start
Zend Framework 2 quick start
Enrico Zimuel
Node.js with Express
Node.js with Express
Gergely Németh
DMCA #25: Jenkins - Docker & Android: Comment Docker peu faciliter la créatio...
DMCA #25: Jenkins - Docker & Android: Comment Docker peu faciliter la créatio...
Olivier Destrebecq
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Bastian Feder
Node.js Build, Deploy and Scale Webinar
Node.js Build, Deploy and Scale Webinar
jguerrero999
Inside neutron 2
Inside neutron 2
Robin Gong
Develop microservices in php
Develop microservices in php
Zend by Rogue Wave Software
Front matter: Next Level Front End Deployments on OpenShift
Front matter: Next Level Front End Deployments on OpenShift
Lance Ball
NetWeaver Developer Studio for New-Beas
NetWeaver Developer Studio for New-Beas
Chander445
How to Manage Cloud Infrastructures using Zend Framework
How to Manage Cloud Infrastructures using Zend Framework
Zend by Rogue Wave Software
HCL Domino Volt - der NSF Killer?
HCL Domino Volt - der NSF Killer?
Oliver Busse
Outlook becomes a Team Player - with a clever add-in
Outlook becomes a Team Player - with a clever add-in
Oliver Busse
Mais conteúdo relacionado
Semelhante a The NERD stuff - opening for Domino to the modern web developer
Day In A Life Of A Node.js Developer
Day In A Life Of A Node.js Developer
Edureka!
PHP QA Tools
PHP QA Tools
rjsmelo
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
leffen
Zend Framework Foundations
Zend Framework Foundations
Chuck Reeves
MeaNstack on Docker
MeaNstack on Docker
Daniel Ku
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Aleksey Asiutin
SWT Tech Sharing: Node.js + Redis
SWT Tech Sharing: Node.js + Redis
Infinity Levels Studio
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf Conference
NodeJS : Communication and Round Robin Way
NodeJS : Communication and Round Robin Way
Edureka!
"JavaME + Android in action" CCT-CEJUG Dezembro 2008
"JavaME + Android in action" CCT-CEJUG Dezembro 2008
Vando Batista
Zend Framework 2 quick start
Zend Framework 2 quick start
Enrico Zimuel
Node.js with Express
Node.js with Express
Gergely Németh
DMCA #25: Jenkins - Docker & Android: Comment Docker peu faciliter la créatio...
DMCA #25: Jenkins - Docker & Android: Comment Docker peu faciliter la créatio...
Olivier Destrebecq
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Bastian Feder
Node.js Build, Deploy and Scale Webinar
Node.js Build, Deploy and Scale Webinar
jguerrero999
Inside neutron 2
Inside neutron 2
Robin Gong
Develop microservices in php
Develop microservices in php
Zend by Rogue Wave Software
Front matter: Next Level Front End Deployments on OpenShift
Front matter: Next Level Front End Deployments on OpenShift
Lance Ball
NetWeaver Developer Studio for New-Beas
NetWeaver Developer Studio for New-Beas
Chander445
How to Manage Cloud Infrastructures using Zend Framework
How to Manage Cloud Infrastructures using Zend Framework
Zend by Rogue Wave Software
Semelhante a The NERD stuff - opening for Domino to the modern web developer
(20)
Day In A Life Of A Node.js Developer
Day In A Life Of A Node.js Developer
PHP QA Tools
PHP QA Tools
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
Zend Framework Foundations
Zend Framework Foundations
MeaNstack on Docker
MeaNstack on Docker
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
Kubernetes Navigation Stories – DevOpsStage 2019, Kyiv
SWT Tech Sharing: Node.js + Redis
SWT Tech Sharing: Node.js + Redis
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
ZFConf 2012: Zend Framework 2, a quick start (Enrico Zimuel)
NodeJS : Communication and Round Robin Way
NodeJS : Communication and Round Robin Way
"JavaME + Android in action" CCT-CEJUG Dezembro 2008
"JavaME + Android in action" CCT-CEJUG Dezembro 2008
Zend Framework 2 quick start
Zend Framework 2 quick start
Node.js with Express
Node.js with Express
DMCA #25: Jenkins - Docker & Android: Comment Docker peu faciliter la créatio...
DMCA #25: Jenkins - Docker & Android: Comment Docker peu faciliter la créatio...
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Debugging PHP with xDebug inside of Eclipse PDT 2.1
Node.js Build, Deploy and Scale Webinar
Node.js Build, Deploy and Scale Webinar
Inside neutron 2
Inside neutron 2
Develop microservices in php
Develop microservices in php
Front matter: Next Level Front End Deployments on OpenShift
Front matter: Next Level Front End Deployments on OpenShift
NetWeaver Developer Studio for New-Beas
NetWeaver Developer Studio for New-Beas
How to Manage Cloud Infrastructures using Zend Framework
How to Manage Cloud Infrastructures using Zend Framework
Mais de Oliver Busse
HCL Domino Volt - der NSF Killer?
HCL Domino Volt - der NSF Killer?
Oliver Busse
Outlook becomes a Team Player - with a clever add-in
Outlook becomes a Team Player - with a clever add-in
Oliver Busse
DNUG Development Day 2019
DNUG Development Day 2019
Oliver Busse
DNUG44 Watson Workspace
DNUG44 Watson Workspace
Oliver Busse
Paradiesisch - OpenNTF
Paradiesisch - OpenNTF
Oliver Busse
Find your data
Find your data
Oliver Busse
ISBG 2016 - XPages on IBM Bluemix
ISBG 2016 - XPages on IBM Bluemix
Oliver Busse
GraphDb in XPages
GraphDb in XPages
Oliver Busse
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
Oliver Busse
Utilizing the open ntf domino api
Utilizing the open ntf domino api
Oliver Busse
XPages on Bluemix - the Do's and Dont's
XPages on Bluemix - the Do's and Dont's
Oliver Busse
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
Oliver Busse
SUTOL 2015 - Utilizing the OpenNTF Domino API
SUTOL 2015 - Utilizing the OpenNTF Domino API
Oliver Busse
Out of the Blue - the Workflow in Bluemix Development
Out of the Blue - the Workflow in Bluemix Development
Oliver Busse
Transformations - a TLCC & Teamstudio Webinar
Transformations - a TLCC & Teamstudio Webinar
Oliver Busse
Transformations
Transformations
Oliver Busse
Out of the Blue: Getting started with IBM Bluemix development
Out of the Blue: Getting started with IBM Bluemix development
Oliver Busse
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
Oliver Busse
Dnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsession
Oliver Busse
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
Oliver Busse
Mais de Oliver Busse
(20)
HCL Domino Volt - der NSF Killer?
HCL Domino Volt - der NSF Killer?
Outlook becomes a Team Player - with a clever add-in
Outlook becomes a Team Player - with a clever add-in
DNUG Development Day 2019
DNUG Development Day 2019
DNUG44 Watson Workspace
DNUG44 Watson Workspace
Paradiesisch - OpenNTF
Paradiesisch - OpenNTF
Find your data
Find your data
ISBG 2016 - XPages on IBM Bluemix
ISBG 2016 - XPages on IBM Bluemix
GraphDb in XPages
GraphDb in XPages
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
Utilizing the open ntf domino api
Utilizing the open ntf domino api
XPages on Bluemix - the Do's and Dont's
XPages on Bluemix - the Do's and Dont's
Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
SUTOL 2015 - Utilizing the OpenNTF Domino API
SUTOL 2015 - Utilizing the OpenNTF Domino API
Out of the Blue - the Workflow in Bluemix Development
Out of the Blue - the Workflow in Bluemix Development
Transformations - a TLCC & Teamstudio Webinar
Transformations - a TLCC & Teamstudio Webinar
Transformations
Transformations
Out of the Blue: Getting started with IBM Bluemix development
Out of the Blue: Getting started with IBM Bluemix development
Fix & fertig: Best Practises für "XPages-Migranten"
Fix & fertig: Best Practises für "XPages-Migranten"
Dnug 112014 modernization_openn_ntf_ersatzsession
Dnug 112014 modernization_openn_ntf_ersatzsession
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
DNUG 38: "Einen Rahmen schaffen: Vorteile durch Frameworks in der Domino-Webe...
Último
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
AnnaArtyushina1
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
Juha-Pekka Tolvanen
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
masabamasaba
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
Jim McKeeth
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
WSO2
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
masabamasaba
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
Papp Krisztián
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
masabamasaba
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
Presentation.STUDIO
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
masabamasaba
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
AmarnathKambale
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
masabamasaba
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
masabamasaba
Último
(20)
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
WSO2CON 2024 - Building the API First Enterprise – Running an API Program, fr...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Abortion Pills In Pretoria ](+27832195400*)[ 🏥 Women's Abortion Clinic In Pre...
Artyushina_Guest lecture_YorkU CS May 2024.pptx
Artyushina_Guest lecture_YorkU CS May 2024.pptx
What Goes Wrong with Language Definitions and How to Improve the Situation
What Goes Wrong with Language Definitions and How to Improve the Situation
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
WSO2CON 2024 - WSO2's Digital Transformation Journey with Choreo: A Platforml...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
WSO2CON 2024 Slides - Open Source to SaaS
WSO2CON 2024 Slides - Open Source to SaaS
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
%in Rustenburg+277-882-255-28 abortion pills for sale in Rustenburg
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
WSO2Con2024 - Enabling Transactional System's Exponential Growth With Simplicity
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
The NERD stuff - opening for Domino to the modern web developer
1.
De07 TheNERDstuff:openingDominotothe modernwebdeveloper JanKrejcarek PPFbanka(CZ) @jan_krejcarek OliverBusse We4IT(D) @zeromancer1972
2.
Agenda Spoiler:NERD=Node.js,Express,React,Domino Node.jsintroduction AppDevPack Proton,DesignCatalog&DQL Development,Testing,Deployment CRUDdemo Securityoptions GettingHelp Resume:why? Q&A Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
3.
Node.jsintroduction Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
4.
Node.jsisNOTaserver Butyoucancodeone Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
5.
Simplestserverexample const http =
require('http'); const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.write(new Date().toISOString()); res.end(); }); server.listen({port:8080}, () => { console.log("listening") }); Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
6.
FrameworksforNode.jswebapps Express Koa Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
7.
Expressbasicprinciple Codefortheendpoint: router.get('/certificates/expiring/:someDate?', async (req,
res, next) => { let d = null; if (typeof req.params.someDate != 'undefined') { d = parse(req.params.someDate); } else { d = addMonths(endOfDay(new Date()), 3); } try { var docs = await dao.getCertificatesExpiringBefore(d); res.json(docs); } catch (error) { res.status(500).json({error:error.message}) } }) Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
8.
DominoAppDevPack Standalonedistribution(partnumberCC0NGEN) NotpartoftheNotes/Dominoinstallationpackage NotsupportedinDominoDesigner(whichisgood) AvailableforDominoonLinuxandWindows(sincev1.0.1,March26,2019) Quarterlyreleases Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
9.
ContentoftheAppDevPack Protonservertask DominoDBmoduleforNode.js(notavailableonnpmjs.org,yet) Demoapplicationwithdata Documentation Installationprocedure APIdocumentation DominoQueryLanguagesyntax IAMexamples Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
10.
Protonschema Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
11.
Protontaskinstallation Copythe"proton"filetotheDominoprogramdirectory Add"Proton"totheServerTasksvariableinnotes.initostarttheProton taskwhenDominostarts ConfiguretheProtonusingnotes.inivariables: PROTON_LISTEN_ADDRESS=0.0.0.0 Listensonallavailablenetworkinterfaces PROTON_LISTEN_PORT=30000 TCP/IPporttouse PROTON_SSL=1 UseTLSforcommunication PROTON_KEYFILE=server.kyr CanbethesameDominoalreadyusesforTLS PROTON_AUTHENTICATION=client_cert AuthenticateNode.jsappsusingacertificate Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
12.
Recommendedsettingforproduction Encryptthecommunication Authenticateapplicationsusingacertificate Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
13.
Three‑tierarchitecture BymovingapplicationlogictoNode.jsandthepresentationlogictothe browserweareactuallymovingtoathree‑tierarchitecturewhereDomino functionsasastorage Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
14.
Proton Three‑tierarchitecture Inthatcaseuserswillbeauthenticatedbytheapplicationlayer(Node.js) andtheNode.jsapplicationwilluseanotheraccounttoaccessthedata Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
15.
Proton Howitworks ProtonseesNode.jsapplicationconnectingusingDominoDBmoduleasa userwithcertainrights Alloperationsondataareexecutedundertheauthorityofthisuser ThisusersneedssufficientrightsintheACLofthedatabaseituses ItistheNode.jsapplication'stasktoensurecorrectaccesstodatatoits users Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
16.
Proton Authenticatingusingacertificate Node.jsapplicationusingDominoDBneedstohaveaPersondocumentin theDominoDirectory ItalsoneedsanX.509certificateandholdtheprivatekeytothatcertificate ThecertificateneedstobeloadedtothePersondocument ImportInternetCertificateactiononthePersondocument ThenameinthePersondocumentmustcorrespondtothesubject's commonnamefromthecertificate TheuserneedstohaveaccesstothedatabaseviaACL Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
17.
Persondocumentfortheapplication Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
18.
ACLrecordinthedatabase Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
19.
RunningProton commandontheDominoserverconsole:loadproton Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
20.
DesignCatalog,DQL domino‑dbmoduleloadsacollectionofdocumentsbyrunningaDQL query. DesignCatalogisneededforDQLtoworkproperly. Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
21.
DesignCatalog,DQL Addadatabasetothecatalog: load updall <database
path> -e Updateadatabaseinthecatalogwhenthedesignchanges: load updall <database path> -d Whentheupdatefails: runtheupdallagainwiththe‑eflag: Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
22.
DQLFacts1/3 DQLscansalimitednumberofdocumentsandviewentries(200000) increaseitwithanotes.inisetting(systemwide) QUERY_MAX_DOCS_SCANNED QUERY_MAX_VIEW_ENTRIES_SCANNED DQLqueryrunsforalimitedtime(2minutes) rethinkyourdesign Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
23.
DQLFacts2/3 ProtonreturnstheresultssortedbyNoteIDandreturnsonlyasubsetofthe results(max200). Youhavetoloadallresultsandsortthemyourself SortingshouldbeavailableinDomino11 Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
24.
DQLFacts3/3 "Mindthegap" DQLqueryneedsspacesaroundoperators,valuesanditemnames 'Cards'.Subtypes ='Beast' ERR_BAD_REQUEST:Queryisnotunderstandable‑syntaxerror‑MUSThaveat leastoneoperator UsetheexplainQuery()methodtoanalyzeyourqueriesandoptimizethem ['Cards'.Subtypes =
'Beast' AND 'Cards'.ConvertedManaCost > 4] 0. AND (childct 2) (totals when complete:) Prep 0.0 msecs, Exec 71.428 msecs, Sc 1.'Cards'.Subtypes = 'Beast' View Column Search estimated cost = 5 Prep 0.326 msecs, Exec 3.506 msecs, ScannedDocs 0, Entries 248, FoundDocs 1.'Cards'.ConvertedManaCost > 4 View Column Search estimated cost = 10 Prep 0.112 msecs, Exec 67.915 msecs, ScannedDocs 0, Entries 4482, FoundDoc Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
25.
Settingupyourdevelopmentenvironment (1) InstallNode.jsruntime(Win,Mac,Linux) Grabyourfavoriteeditor(VSCoderecommended) Inittheproject mkdir myProject cd myProject npm
init Addthedomino‑dbNodepackagetoyourproject npm install <pathToAppDevPack>/domino-domino-db-1.2.0.tgz -save Startcoding Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
26.
Settingupyourdevelopmentenvironment (2) Checkthepackage.jsonfile itwillalreadycontainthedepencyfordomino/domino‑db addotherdependencies Createthestartjavascriptfile Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
27.
Testing?Sure! Severalunittestpackagesavailable Mocha Tape Chai Sinon Testsaredefinedinseparatefiles Testsareconfiguredinthepackage.jsonfile { "test-unit": "NODE_ENV=test mocha
'/**/*.spec.js'", } Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
28.
Deployment(1) Scenariostoconsider deploytoacloudservicelikeAWS,Azure,IBMCloud,Heroku deploytoon‑premisesenvironment On‑premises Doesyourserverhaveinternetaccesstoinstallpackages? Doesyourserverutilizealoadbalancer? Hotdeploymentornot? UsingaDockercontainer? Usingaproxylikenginx Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
29.
Deployment‑usingaproxy AsNode.jsappscanusedifferentportsyoushouldutilizethemwitha proxytokeeptheURLendpointssimple nginxisalightweightproxyserverwhichiseasytosetup # excerpt from
nginx.conf location /app1 { proxy_pass http://localhost:3001/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /app2 { proxy_pass http://localhost:3002/; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
30.
Deployment‑ProcessManager(1) Useaprocessmanagertohandleallyourapps Donotstartyourappsmanuallyorwithasystemdscript/service pm2ishighlyrecommended Verysimpletosetup Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
31.
Deployment‑ProcessManager(2) starttheappwiththeprocessmanager pm2 start myApp.js showallappsmanagedbypm2 pm2
ls ┌───────────────────────┬────┬─────────┬──────┬───────┬────────┬─────────┬────────┬──────┬ │ App name │ id │ version │ mode │ pid │ status │ restart │ uptime │ cpu │ ├───────────────────────┼────┼─────────┼──────┼───────┼────────┼─────────┼────────┼──────┼ │ node alexa-node-red │ 11 │ N/A │ fork │ 24488 │ online │ 0 │ 2M │ │ node domino-node-list │ 9 │ N/A │ fork │ 24152 │ online │ 0 │ 2M │ │ node rootweb │ 10 │ N/A │ fork │ 24229 │ online │ 0 │ 2M │ │ node-red │ 0 │ N/A │ fork │ 5463 │ online │ 6 │ 49D │ └───────────────────────┴────┴─────────┴──────┴───────┴────────┴─────────┴────────┴──────┴ Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
32.
Deployment‑ProcessManager(3) savetheappstothelistofbootableapps pm2 save enablepm2tostartallsavedappsatboot pm2 startup AllcommandsarethesameonWin,Mac&Linux Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
33.
domino‑dbmodule Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
34.
domino‑dbclasses Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
35.
domino‑dbmodule providesfourbasicoperationswithdata‑Create,Read,Update,Delete hasasingleentrypoint:userServer()function const { useServer
} = require('@domino/domino-db'); const server = await useServer({hostName: 'localhost', connection:{ port: '30000' }}); Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
36.
domino‑dbcommandlineexample const { useServer
} = require('@domino/domino-db'); const serverConfig = {hostName: 'localhost',connection:{ port: '30000' const databaseConfig = { filePath: 'database/node-demo.nsf' }; (async function() { try { const server = await useServer(serverConfig); const db = await server.useDatabase(databaseConfig); const response = await db.bulkReadDocuments({ query: "'AllContacts'.State = 'FL'", itemNames: ['LastFirstName', 'Email'], computeOptions: { computeWithForm: true } }); console.log(JSON.stringify(response)); } catch (error) { console.log(`${error.code}: ${error.message}`) } })() Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
37.
DEMO‑WebApplication Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
38.
CRUDDetails CalluseServer()andServer::useDatabase()onlyonceandcachethe instancesinacustomDataAccessObject Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
39.
CRUDDetails‑Create Whencreatingadocument,youneedtoprovidethe"Form"property WhenwritingaDateitem,youneedtospecifyitlikethis: DueDate: { type:
'datetime', data: '2019-06-30'} Timeneedstobespecifiedtoahundredthofasecond,youcan'tdirectly useaJavaScriptDateobject YoucanspecifycomputeOptionstocomputeitemsinthedocument Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
40.
CRUDDetails‑Read Youalwaysspecifywhichitemsyouwanttoreceive(keepstheamountof transfereddatalow) usecomputeOptionsparametertocomputethecontentofcomputedfor displayitems const response =
await db.bulkReadDocuments({ query: "'AllContacts'.State = 'FL'", itemNames: ['LastFirstName', 'Email'], computeOptions: { computeWithForm: true } }); Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
41.
CRUDDetails‑Update Selectionofoptionsforupdatingdocuments changeselecteditemsinoneormoredocumentsatonce replaceallitemswithasetofotheritems Documentsareimmediatelysaved,thereisnosave()method Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
42.
SecurityOptions(1) IAM(IdentityAccessManagement)enablesaccessfromaNode.jsappto DominoasarealDNNuser UsesOAuthmechanismtoauthorizeagainstDomino Domino10providesOAuth(kindof) Accessisrestrictedtocertainscopes open_id offline_access das.freebusy das.calendar.read.with.shared das.calendar.write.with.shared CurrentlyIAMdoesnotsupporttheNode.jsAPIforDomino,onlyDAS:‑( Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
43.
SecurityOptions(2) SetupDominoasanOAuthprovideristimeconsuming(expect1workday) Youwillneedtotouchthefollowingareasof(Domino)administration Certificatehandling Keyringgeneration DominowithSSL DominoLDAPconfiguration OAuthDSAPIsetup SetuptheIAMserviceapp(serverpart) CustomizetheIAMserviceapp(optional) Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
44.
SecurityOptions(3) IAMcomeswithexamplesofdifferentauthorizationflows AuthorizationCodeFlow ClientCredentialFlow Theseexamplescanbeusedtointegratethosemechanismtoyourown app(i.e.IAMclientapp) AppsmustberegisteredwiththeIAMserviceapp(generatestheappID andtheappsecret) YouareresponsibleforthetokenhandlingwhenaccessingtheDomino server! Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
45.
GettingHelp/Resume:why? NERDiscompletelydifferentfromtraditionalNotesdevelopment Gettinghelp DominowithNodeisdiscussedintheOpenNTFSlackchanneldominonodejs ReachoutfortheexpertslikeDanDumont,PeiSunorHeikoVoigt(allactiveon Slack) Whyyoushoulduseit? ItopensDominoforthemodernwebdeveloper(newbloodforthebestapp serverintheworld) OfferstonsofnewpossibilitiescomingwithvariousNodemodulesandplugins Usinge.g.Node‑REDdirectstothereallow‑codearea‑butthisiscontentfor separatesessions;‑) Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
46.
Q&A Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
47.
Resources WebinarDQL&FAQ:https://www.ibm.com/blogs/collaboration‑solutions/2019/02/04/domino‑query‑language‑faq DominoAppDevPackDocumentation:https://doc.cwpcollaboration.com/appdevpack/docs/en/homepage.html VisualStudioCodeEditor:https://code.visualstudio.com/ UnittestingandTDDinNode.js:https://www.codementor.io/davidtang/unit‑testing‑and‑tdd‑in‑node‑js‑part‑1‑8t714s877 Node.jsUnitTesting:https://blog.risingstack.com/node‑hero‑node‑js‑unit‑testing‑tutorial/ Nginxwebserver:https://nginx.org/en/docs/ pm2processmanager:https://pm2.io/runtime/ StackOverflowNode.js:https://stackoverflow.com/questions/tagged/node.js OpenNTFSlack:https://slackin.openntf.org/ Node‑RED:https://nodered.org/ SessionRepo:https://gitlab.com/obusse/engage‑2019 Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
48.
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
49.
Engage2019‑TheNERDstuff:openingDominotothemodernwebdeveloper(De07)
Baixar agora