Express.js и библиотеки

Занятие 11

Профессия
Node.js & React.js developer
продвинутый курс

1

  • Express libs
  • Passport.js & OAuth2
  • File donwload & upload
  • Sockets
  • Примеры

План

1

Express.js libs

Express.js libs

CORS

Access Logger

Utils libs

2

Passport.js

&

OAuth2

OAuth2

Passport.js

Passport.js

принципы работы

const user1 = {
  name: 'Steve',
  avatar: 'steve.jpg',
  passports: [
    LocalPassport,
  ]
};

const user2 = {
  name: 'Robert',
  avatar: 'robert.jpg',
  passports: [
    FacebookPassport,
    TwitterPassport,
    VkontaktePassport,
  ]
};
const user3 = {
  name: 'Jack',
  avatar: 'jack.jpg',
  passports: [
    FacebookPassport,
    TwitterPassport,
    LocalPassport,
  ]
};

const user4 = {
  name: 'Gleb',
  avatar: 'glen.jpg',
  passports: [
  ]
};

Паттерны проектирования

Use passport.js

choose strategy

> npm install passport
> npm install passport-facebook
> npm install passport-twitter
> npm install passport-vkontakte

Use passport.js

Configure Strategy

import passport from 'passport';
import Facebook from 'passport-facebook';
import config from './config/auth';

passport.use(new Facebook.Strategy({
    clientID: config.FACEBOOK_APP_ID,
    clientSecret: config.FACEBOOK_APP_SECRET,
    callbackURL: "http://localhost:3000/auth/facebook/callback"
  },
  function(accessToken, refreshToken, profile, cb) {
    User.findOrCreate({ facebookId: profile.id }, function (err, user) {
      return cb(err, user);
    });
  }
));

Use passport.js

Authenticate Requests

app.get('/auth/facebook',
  passport.authenticate('facebook'));

app.get('/auth/facebook/callback',
  passport.authenticate('facebook', { failureRedirect: '/login' }),
  function(req, res) {
    // Successful authentication, redirect home.
    res.redirect('/');
  });

Best Practices

Passport.userId -> User._id

Best Practices

  1. vk.com/api -> Passport.raw
  2. Passport.raw -> Passport.profile
  3. [Passport.profile] => User.profile

Not best Practices?

А нужно ли использовать локальный пасспорт ?? 

Что такое username ?

поля: (info, profile) (meta, values) (private)

 

3

Files download

& upload

Download files

Express static middleware

app.use(express.static('public'))  // directory only 
app.use('/static', express.static('static'))
app.use('/api', ...)
import staticFile from 'connect-static-file';
app.use('/bundle.js', staticFile('generated/bundle.js')); // file
app.use('/static', staticFile('public')); //directory
app.use('/favicon.ico', (req, res) => {
  if (some) {
    return res.sendFile(path.join(__dirname, '../public/some/dir/favicon.ico');
  }
  res.sendFile(path.join(__dirname, '../public/other/dir/favicon.ico');
});

Multer

var express = require('express')
var app = express()
var multer  = require('multer')
var upload = multer()

app.post('/profile', upload.array(), function (req, res, next) {
  // req.body contains the text fields
})


app.post('/profile', upload.any(), function (req, res, next) {
  // req.files
})

4

Sockets

Sockets

  • ws
  • express-ws
  • express-ws-routes
  • express-ws-rpc

Express-ws

Socket.io + LSK

5

Попрактикуемся

  • lsk/modules
  • lsk-auth
  • lsk/middlewares
  • lsk/sockets

Попрактикуемся

Игорь Суворов

Thanks!

any questions?

программист-предприниматель

Made with Slides.com