Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Newbie on Node
Search
Edvinas
February 19, 2014
Programming
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Newbie on Node
My experience starting to build side project with Node. Presented in Vilnius.JS meetup.
Edvinas
February 19, 2014
More Decks by Edvinas
See All by Edvinas
Peak of a Programmer
edvinasbartkus
1
110
Other Decks in Programming
See All in Programming
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
17
8.8k
キャリア迷子上等 ─ "ない道"は自分で作ればいい
16bitidol
3
2.8k
1B+ /day規模のログを管理する技術
broadleaf
0
130
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
260
使用 Meilisearch 建立新聞搜尋工具
johnroyer
0
120
Performance Engineering for Everyone
elenatanasoiu
0
270
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
210
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
480
音楽のための関数型プログラミング言語mimiumにおける多段階計算の活用
tomoyanonymous
1
300
symfony/aiとlaravel/boost
77web
0
120
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
SREは、MCPとSRE Agentをこう使え!
kazumax55
0
150
Featured
See All Featured
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
240
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
650
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
220
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
330
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
330
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.6k
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.8k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
390
Raft: Consensus for Rubyists
vanstee
141
7.6k
Producing Creativity
orderedlist
PRO
348
40k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
190
Transcript
node.js newbie
Chapter #0
Chapter #0 What I want to say?
None
None
Chapter #1
About newbie
Find me github.com/edvinasbartkus
None
None
None
Chapter #2
Chapter #2
⚡ which node /usr/local/bin/node
⚡ which node /usr/local/bin/node
⚡ npm install something ⚡ ls -l drwxr-xr-x node_modules/
⚡ npm install -g something
⚡ cat package.json { "name": "commentreader", "version": "0.0.1", "main": "app.js",
"scripts": { "test": "./node_modules/.bin/mocha --recursive -R xunit test/ > test-reports.xml", "migrate": "./node_modules/.bin/db-migrate up" }, "dependencies": { "express": "3.4.8", "knex": "~0.5.4", "bookshelf": "~0.6.2", "pg": "~2.11.1", "socket.io": "~0.9.16", "htmlparser2": "~3.4.0", "minreq": "~0.2.3", "request": "~2.33.0" }, "devDependencies": { "grunt": "~0.4.2", "grunt-express-server": "~0.4.11", "grunt-contrib-watch": "~0.5.3", "grunt-contrib-concat": "~0.3.0", "should": "~3.1.0", "supertest": "~0.9.0", "mocha": "~1.17.1", "db-migrate": "~0.6.3" } }
CODE STRUCTURE Gruntfile.js Procfile README.md app/ - domains/ - models/
- routes/ - views/ app.js browser/ - components/ - controllers/ - views/ - main.js config.js database.json migrations/ node_modules/ package.json public/ test/ worker.js
// Express var app = express(); app.configure(function () { app.use(express.logger('dev'));
app.use(express.bodyParser()); ! var viewsDir = path.join(__dirname + ‘/browser/views'); app.use(‘/views', express.static(viewsDir)); ! var publicDir = path.join(__dirname + ‘/public'); app.use(express.static(publicDir)); }); EXPRESS
// Routes var pages = require('./app/routes/pages'); app.get('/pages', pages.findAll); app.get('/pages/:id', pages.findById);
app.post('/pages', pages.addPage); EXPRESS ROUTES
// Server var server = app.listen(config.port); ! // Sockets var
sockets = require('./app/sockets')(server); RUN & ATTACH SOCKETS
'use strict'; ! var socket = require('socket.io'); ! module.exports =
function (app) { var io = socket.listen(app, { log: false }); io.on('connection', function (socket) { console.log('User connected'); }); ! // socket.join('room:test'); return io; }; SOCKETS.IO
Chapter #3
Chapter #3
T H E W E B ' S S C
A F F O L D I N G T O O L F O R M O D E R N W E B A P P S
None
Chapter #3.1
Chapter #3.1
GRUNT
Chapter #4
Chapter #4
None
'use strict'; ! var should = require('should'); var app =
require('./../app.js'); ! describe('Existance', function () { it('should exist', function (done) { should.exist(app); done(); }); });
! var should = require('should'); var request = require('supertest'); var
app = require('./../app.js'); ! describe('Pages API', function () { it('GET /pages 200', function (done) { request(app) .get('/pages') .expect(200, done); });
⚡ mocha test/ ! ․․․ ! 3 passing (85ms)
BUSTER.JS INTERN.JS
None
None
Have you met Jenkins?
None
⚡ cat package.json { "main": "app.js", "scripts": { "test": “./node_modules/.bin/mocha
--recursive -R xunit test/ > test-reports.xml”, ! "migrate": "./node_modules/.bin/db-migrate up" }, "dependencies": { }, "devDependencies": { } }
Chapter #Lost_Nmbr.2
None
Free 1 dyno ! !
Free 1 dyno 512mb ram !
Free 1 dyno 512mb ram 4 (virtual) CPU cores Intel
Xeon X5550 @ 2.67GHz
Free 1 dyno 750 free hours !
⚡ cat Procfile web: node app.js
⚡ cat Procfile web: node app.js worker: node worker.js
Heroku idles
Heroku idles Do you remember Jenkins?
Heroku idles Pingdom is also cool
Deploy in 6 seconds
Do not use console.log http://micheljansen.org/blog/entry/1698
Redis & RabbitMQ & Postgres
None
What is the right path?
None
None
Chat Chapter irc.freenode.org #VilniusJS