Web Development #2

  • Refactor views
  • Sessions
  • File uploads
  • To the cloud (and beyond)

But first...

let's recap

Connect middleware

var connect = require('connect');
var colors = require('colors');
var server = connect();

var authcheck = function(req, res, next){
    console.log("Performing difficult auth checks".grey);
    next();
}

var myServer = function(req, res, next){
    console.log("Serving ".green + req.url.green)
    res.writeHead(200);
    res.end("You are at " + req.url);
}

server.use('/admin', authcheck);
server.use(myServer);

server.listen(3000);

Functions that run for each request. Except for those with mounted routes.

Express framework

var express = require('express');
var router = express.Router();
var app = express();

router.get('/', function(req, res) {
    res.send('index page');
});

router.get('/users', function(req, res) {
    res.send('users page');
});

app.use(router);
app.listen(3000);

Web application framework for node

Refactor Views

EJS

<% include another_file %>

Code

Add Sessions

Sessions?

  • How do they work?
  • What is the 'secret' stuff?

Code

...note to self, next part

Data: querystring, body & files!

  • Middleware parses the request (show raw request)
  • Which middleware does what?
  • Files are different, they come as events afterwards..!

Querystring

var connect = require('connect');
var querystring = require('qs');
var server = connect();

server.use(function(req, res){
	var query = querystring.parse(req._parsedUrl.query);

	console.log(req);

	res.writeHead(200, {'Content-Type': 'text/html'});
	res.end(JSON.stringify(query));
});

server.listen(3000);

req._parsedUrl

Body of data

var connect = require('connect');
var bodyParser = require('body-parser');
var server = connect();

server.use(bodyParser.urlencoded({ extended: false }));

server.use(function(req, res){
	console.log(req.body);

	res.writeHead(200, {'Content-Type': 'text/html'});
	res.end(
		"<form method='post'>"+
			"<input name='myText' type='text'/>"+
			"<input name='myButton' type='submit' />"+
		"</form>");
});

server.listen(3000);

req.body

How about files?!

They come afterwards!

var connect = require('connect');
var app = connect();

app.use(function(req, res){
	req.setEncoding('utf8');

	req.on('data', function(data){
		console.log(data);
	});	
	req.on('end', function(){
		console.log("done");
	});	

	res.end("<html><form method='post' enctype='multipart/form-data'>"+
			"<input type='text' name='file_caption' />"+
			"<input type='file' name='file_file' />"+
			"<input type='submit' />"+
		"</form></html>");
});

app.listen(3000);

events!

req is an IncomingMessage which implements the Readable Stream

Add Item

Code

Heroku!

Heroku

https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction

Git

http://git-scm.com/

  • Starta lokal git
  • Skapa heroku-app
  • Koppla heroku-app till lokal git
  • Lägg node_modules i .gitignore
  • Pusha!

Heroku + git

Next time...

MongoDB

Test

Node.JS #3

By Gustav Jorlöv

Node.JS #3

  • 471