Use Node.js to create a REST API

Post on 18-Jul-2015

772 views 0 download

Tags:

transcript

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