NODE.JS
INTRODUCTION
WHAT IS NODE.JS ?Node.JS is the Javascript engine of Chrome, port to be used
from the command line.
ABOUT NODE.JSCreated by Ryan Dahl in 2009Licence MITBased on Google Chrome V8 Engine
BASICS
ARCHITECTURESingle ThreadedEvent LoopNon‐blocking I/OJavascript (Event Driven Language)
NODE.JS SYSTEM
HELLO WORLD IN NODE.JShello.js
console.log('Hello World!');
$ node hello.js> Hello World!
DON'T FORGET THE DEMO.DON'T FORGET THE DEMO.
MODULES / LOAD
Load a core module or a packaged module(in node_modules directory)
var http = require('http');
Load from your projectvar mymodule = require('./mymodule');
MODULES / CREATE
speaker.jsmodule.exports = { sayHi: sayHi}
function sayHi() { console.log('hi!'); }
example.jsvar speaker = require('./speaker');
speaker.sayHi();
YOU PREPARE A DEMO,YOU PREPARE A DEMO,DON'T U ?DON'T U ?
ERROR-FIRST CALLBACKSThe first argument of the callback is always reserved
for an error object:fs.readFile('/foo.txt', function(err, data) { if (err) { console.log('Ahh! An Error!'); return; }
console.log(data);});
EXPRESS FRAMEWORK
WHAT IS IT ?"Fast, unopinionated, minimalist web framework for Node.js"
(expressjs.com)
HELLO WORLD IN EXPRESSvar express = require('express');var app = express();
app.get('/', function(req, res) { res.send('Hello World!');});
app.listen(9001);
Don’t forget:$ npm install express
LIVE DEMO ?LIVE DEMO ?
MIDDLEWARE / WHAT ?
Middlewares can :make changes to the request and the response objectsend the request
MIDDLEWARE / PIPE
Middlewares are in a pipe
var bodyParser = require('body-parser');var cookieParser = require('cookie-parser');var errorHandler = require('errorhandler'),
var app = express();app.use(bodyParser.json());app.use(cookieParser());app.use(errorHandler());
MIDDLEWARE / STANDARD MODULES
body‐parser Parse request body and populate req.body
cookie‐parser Parse cookie header and populatereq.cookies
cors Allow CORS requests
errorhandler Send a full stack trace of error to the client.Has to be last
express.static Serve static content from the "public"directory (html, css, js, etc.)
method‐override Lets you use PUT and DELETE where theclient doesn't support it
ROUTER / HELLO WORLD
api‐hello.jsvar express = require('express');var router = express.Router();
router.get('/', function(req, res) { res.send('Hello World!');});
module.exports = router;
index.jsvar express = require('express');var app = express();
// Routesapp.use('/hello', require('./api-hello'));
app.listen(9001);
CHOOSE THE DEMO PILL !CHOOSE THE DEMO PILL !
ROUTER / WHY ?
Routers help to split the code in modules
MONGOOSE
WHAT IS IT ?Mongoose is a Node.js connector for MongoDB.
CONNECT TO MONGODBvar mongoose = require('mongoose');mongoose.connect('mongodb://localhost/test');
SCHEMADefine the format of a document with a schema :
var StudentSchema = new mongoose.Schema({ name: String, age: Number course: [String], address: { city: String, country: String }});
var Student = mongoose.model('Student', StudentSchema);
CREATE OR UPDATE ITEMvar student = new Student({ name: 'Serge', age: 23, course: ['AngularJS', 'Node.js'], address: { city: 'Paris', country: 'France' }});
student.save(function(err) { if (err) return console.log('not saved!'); console.log('saved');});
REMOVE ITEMstudent.remove(function(err) { if (err) return console.log('not removed!'); console.log('removed');});
FIND ITEMSStudent.findOne({name: 'Serge'}, function(err, student) { // student is an Student object});
MEAN STACK
WHAT IS IT ?MEAN stands for :MongoDBExpress frameworkAngularJSNodeJS
PROJECT STRUCTUREroot|- api : all routes and processing |- thing.js : an route example|- node_modules : external librairies|- index.js : configuration and main application|- package.json : list of external librairies
INDEX.JS4 parts :
1. Connect to the Database2. Configure Express framework3. Define routes4. Start the server
HE HAS PROMISED USHE HAS PROMISED USAN EXAMPLE, RIGHT?AN EXAMPLE, RIGHT?
ROUTE EXAMPLE1. Define routes2. Define model3. Define processing
DID HE FORGETDID HE FORGETTHE EXAMPLE ?THE EXAMPLE ?
TEST YOUR API !
POSTMANUse Postman extension for Chrome (packaged app)
GO FURTHERNodeSchool.io (learn you node)
TUTORIAL
TUTORIAL / GET THE PROJECT
GET THE PROJECT$ git clone https://github.com/fabienvauchelles/stweb-angularjs-tutorial.git$ cd stweb-angularjs-tutorial/backend
TUTORIAL / SERVER
GET THE NEXT STEP$ git reset --hard q15$ npm install
CREATE A SERVERFill backend/app.js
TUTORIAL / FIRST ROUTE
GET THE NEXT STEP$ git reset --hard q16
CREATE THE 'FINDALL' ROUTE1. Create a findAll function (node format) to return a list ofarticle
2. Add findAll to the router3. Add the articles route to backend/app.js
TUTORIAL / ROUTE 'CREATE'
GET THE NEXT STEP$ git reset --hard q17
CREATE THE 'CREATE' ROUTE1. Create a create function (node format) to create an articlefrom req.body
2. Add create to the router (HTTP POST)
TUTORIAL / ROUTE 'DELETE'
GET THE NEXT STEP$ git reset --hard q18
CREATE THE 'DELETE' ROUTE1. Create a destroy function (node format) to remove an article(id in the url)
2. Add destroy to the router (HTTP DELETE)
TUTORIAL / IMPORT DATA
START MONGODBIn a new shell :
$ mongod
TUTORIAL / MONGOOSE
GET THE NEXT STEP$ git reset --hard q19
IMPORT DATA$ mongoimport --db postagram --collection articles --file articles-init.json
ADD MONGOOSE TO THE PROJECT$ npm install mongoose --save
TUTORIAL / CONNECT
GET THE NEXT STEP$ git reset --hard q20
CONNECT SERVER TO MONGODBAdd connect in backend/app.js
TUTORIAL / FINDALL
GET THE NEXT STEP$ git reset --hard q21
USE MONGOOSE FOR FINDALL1. Comment create & destroy route (and function)2. Import mongoose with require3. Replace article static model with a mongoose schema4. Use mongoose to implement findAll
TUTORIAL / SEARCH
GET THE NEXT STEP$ git reset --hard q22
REPLACE FINDALL BY SEARCHUse a MongoDB filter to search on title.Bonus: filter on description and tags
TUTORIAL / ROUTE 'CREATE'
GET THE NEXT STEP$ git reset --hard q23
IMPLEMENT CREATE1. Use mongoose to implement create2. Uncomment the create route
TUTORIAL / ROUTE 'DELETE'
GET THE NEXT STEP$ git reset --hard q24
IMPLEMENT DELETE1. Use mongoose to implement delete2. Uncomment the delete route
© Fabien Vauchelles (2015)
TUTORIAL / FINAL
GET AND READ THE SOLUCE$ git reset --hard q25
Top Related