User Tools

Site Tools


Sidebar



nodejs

node.js

"Redis is ready"

generate by: Doodle3D-App/node_modules/superlogin/lib/sessionAdapters/RedisAdapter.js

parse HTML jQuery style

https://github.com/cheeriojs/cheerio

var request = require('request');
var cheerio = require('cheerio');
var url = 'http://www.marktplaats.nl/s/749032247370.html';
 
request(url, function (error, response, body) {
    if (!error) {
        var $ = cheerio.load(body);
        var url = $('.search-result span').attr('data-url');
        var title = $('.search-result img').attr('title');
        var img = $('.search-result img').attr('src').replace("_82","_83");
        console.log("url:\t",url);
        console.log("title:\t",title);
        console.log("img:\t",img);
    } else {
        console.log(error);
    }
});

app.use & app.get/post combined

var express = require('express');
var app = express();
var http = require('http').Server(app);
 
app.use(express.static(__dirname + '/www'));
 
app.post('/api/v1/call/:roomName', function(req, res) {
  res.send("Hoi: " + req.params.roomName);
});
 
http.listen(8081, function(){
  console.log('listening on *:8081');
});

Long polling

Install log

Node.js was installed at

   /usr/local/bin/node

npm was installed at

   /usr/local/bin/npm

Make sure that /usr/local/bin is in your $PATH.

node-webkit

  • What is nw.js (previously node-webkit) ?

Node.js CMS: Keystone

Mail van Peter: Hey Rick, Dat op Node.js CMS waar ik het over had was Keystone. http://keystonejs.com/ Interessante slides: Moving from PHP to a nodejs full stack CMS https://s3.amazonaws.com/mnb_keystone/slidedecks/keystonejs.pdf

Een aantal toffe dingen:

  • Je genereert de basis met Yeoman http://yeoman.io wat je dan vervolgens kan gaan customizen. Dit is eigenlijk bijna de hele frontend.
  • De daadwerkelijke Keystone CMS is gewoon een dependency (npm package)
  • Doordat het veel bekende bouwstenen gebruikt zoals Express en Mongoose

(MongoDB) is het sneller te leren en zijn er stiekem al veel resources.

  • Doordat het Express gebruikt kun je allerlei template talen https://github.com/strongloop/express/wiki#template-engines gebruiken.
  • Content types, routes (url's) en overzicht pagina's (denk aan de fabmoments pagina)) beschrijf je met overzichtelijke stukjes javascript.
  • Doordat bijna alles met bestanden werkt (behalve de content) kun je normaal versie beheer doen. (Voor content hebben ze csv export mogelijkheden.)
  • Doordat je werkt met Mongoose en template talen kun je heel makkelijk overzicht pagina's (views) maken.
  • Doordat de flow achter het generen van pagina's heel overzichtelijk is heb ik gisteren al fabpublication pagina's kunnen maken.
  • Stiekem zijn er al veel field types, Relations (verwijzingen naar andere soorten content types), TextField met eventueel wysiwyg editor, intern of extern gehoste afbeeldingen of bestanden, datum.
  • Het lijkt een hele actieve community.

Nadelen:

  • Vereist Node.js en MongoDB (wat nog altijd minder makkelijk is dan php en mySQL)
  • Admin UI is nog erg beperkt. Je kan eigenlijk alleen content beheren. Zelfs het menu is nu nog in javascript beschreven.
  • Nog geen permissions / rollen systeem. Je kan bijv nog geen verschillen maken tussen lid, moderator en admin. Wat bijv bij fablab amersfoort erg belangrijk is. #803
  • Er is nog geen goed support voor meertaligheid, zijn ze wel mee bezig. #802
  • Je kan eigenlijk nog niet de admin ui tweaken, maar hier zijn ze hard mee bezig.
  • Je kan nog geen tags gebruiken, zijn ze mee bezig. #153 #282
  • Nog geen themes, al kun je met bootstrap tweaks (Bootswatch http://bootswatch.com/) heel ver komen: #548

Voor puur blogging/publishing is Ghost waarschijnlijk interessanter, maar daar heb ik nog niet echt naar gekeken.
https://ghost.org/

Peter

Express extensions + templates

doorbell

gpio's on Raspberry Pi with nodejs

var Gpio = require('onoff').Gpio;
 
var cols = [
  new Gpio(7, 'in', 'both'),
  new Gpio(8, 'in', 'both'),
  new Gpio(25, 'in', 'both'),
  new Gpio(24, 'in', 'both'),
  new Gpio(23, 'in', 'both')
];
 
var rows = [
  new Gpio(14, 'out'),
  new Gpio(15, 'out'),
  new Gpio(18, 'out')
];
 
setInterval(function() {
  rows[0].writeSync(0);
  rows[1].writeSync(0);
  rows[2].writeSync(0);
  var s = '';
  for (var i=0; i<5; i++) {
    s+=cols[i].readSync();
  }
  console.log(s);
},100);

info about semantic versions

olimex through serial monitor

screen /dev/tty.NoZAP-PL2303-00001014 115200
pm2 logs

pm2 log

cd ~/......./.....
DEBUG=cloud* pm2 start —name=cloud -o /tmp/cloud.log -e /tmp/cloud.error.log index.js
pm2 logs cloud

nodejs http client example

var http = require('http');
 
http.get("........", function(res) {
  console.log("Got response: " + res.statusCode);
 
  res.on('data', function (chunk) {
    console.log('BODY length: ' + chunk.length);
  });
 
  res.on('end', function (chunk) {
    console.log('end');
  });
 
 
}).on('error', function(e) {
  console.log("Got error: " + e.message);
});

http client using node request module

var request = require('request');
var fs = require('fs');
 
request("http://10.0.0.71:8080/?action=snapshot").pipe(fs.createWriteStream('doodle.png'))

nodejs webcam proxy

nodejs webcam stream with EventSource

nvm

curl https://raw.githubusercontent.com/creationix/nvm/v0.11.1/install.sh | bash

> Close and reopen your terminal to start using NVM

nvm install 0.11

socket.io-redis module

Access-Control-Allow-Origin

res.header('Access-Control-Allow-Origin', '*')
res.status(200).send(user.toObject());

create a NodeJS client

var io = require('socket.io-client'); 
var socket = io.connect('http://cloud.doodle3d.com:5000');
 
socket.on("error", function(data) {
  console.log("error",data);
})
 
socket.on("connect_error", function() {
  console.log("connect_error");
})
 
socket.on("connect", function() {
  console.log("connected");
})

pm2

https://github.com/Unitech/pm2

npm install pm2
node_modules/pm2/bin/pm2 start server.js
pm2 list
pm2 describe ...

install module from github

npm install --save git+https://github.com/nkzawa/socket.io-stream.git

stream handbook

serve

var express = require('express');
var app = express();
var http = require('http').Server(app);
 
app.use(express.static(__dirname, '/'));
 
http.listen(3000, function(){
  console.log('listening on *:3000');
});

nodejs & ajax image loading

dit nog lezen: http://blog.marcon.me/post/31143865164/send-images-through-websockets

//server
 
var app = require('express')();
var http = require('http').Server(app);
var fs = require('fs');
 
 
app.get('/', function(req, res){
  res.sendFile(__dirname+'/index.html');
})
 
app.get('/image', function(req, res){
  //res.sendFile(__dirname+"/image.png");
  //return;
 
  fs.readFile('image.png', function(err, data) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end("data:image/png;base64,"+data.toString("base64"));
  });
})
 
http.listen(3000, function(){
  console.log('listening on *:3000');
});
<!--client-->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>

<script>
$(document).ready(function() {
  
  $.get("/image", function(data) {
    $("#img").attr("src",data); //"data:image/jpeg;base64,"+b64;
  });

})
</script>

<img id="img">

binaries over socket.io (wouter)

send an image

fs.readFile('test.png', function(err, data) {
  if (err) throw err; // Fail if the file can't be read.
    res.writeHead(200, {'Content-Type': 'image/png'});
    res.end(data); // Send the file data to the browser.
});

body-parser

var bodyParser = require('body-parser');
//....
app.use(bodyParser.json());
//....
app.post('/stl', function(req, res){
  res.send('<h1>Hello world</h1>');
  console.log(req.body);
})

stljs

https://github.com/cubehero/stljs/blob/master/template/povray.tmpl

needs povray and needs a change in 'node_modules/stljs/lib/to/image.js': remove '-s' in command.

debug

DEBUG=socket.io* nodemon

webcam stream via websockets

RPC using socket.io (with angular example)

bower

sudo npm install -g bower

webserver example with express

var app = require('express')();
var http = require('http').Server(app);
 
app.get('/', function(req, res){
  //res.send('<h1>Hello world</h1>');
  res.sendfile('index.html');
})
 
http.listen(3000, function(){
  console.log('listening on *:3000');
});

socket.io example with express

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
 
//default namespace
io.on('connection', function(socket) {
  console.log('a user connected');
 
  socket.on('disconnect', function(){
    console.log('user disconnected');
  });
 
  socket.on('chat message', function(msg){
    console.log(msg);
    io.emit('chat message', msg);
  });
});
 
///////// OTHER NAMESPACE
io.of("/printers").on('connection', function(socket) {
 
  socket.on('list', function(msg){
    console.log("printers.list")
    socket.emit("list",[
      {id:1, name: "test1",network:"network 1"},
      {id:2, name: "test2",network:"network 2"}
    ]);
  });
 
});
 
http.listen(3000, function(){
  console.log('listening on *:3000');
});

nodejs socket.io with SSL

websocket chat

install via package managers

install

https://github.com/joyent/node/wiki/backports.debian.org
\
1. Install Node and NPM
2. Run the following (as root):

sudo echo "deb http://ftp.us.debian.org/debian wheezy-backports main" >> /etc/apt/sources.list
sudo apt-get update
sudo apt-get install nodejs-legacy
#curl --insecure https://www.npmjs.org/install.sh | bash
curl --insecure https://www.npmjs.org/install.sh > install.sh
chmod +x install.sh
sudo ./install.sh
    

edit nodejs files remotely with sublimetext (and sftp package) and use nodemon for restarting node server on file change

note: nodemon likes to be installed globally with -g but it also works in your local folder

npm install  nodemon
export PATH=$PATH:`pwd`/node_modules/nodemon/bin
nodemon.js

make nodemon only watch single file

nodemon -w server.js server.js

nodejs socket.io with angular

socket.io with token authentication

nodejs.txt · Last modified: 2017/05/04 12:57 by rick