Posts for: #Node.js

How to organize your express.js project

這是一個,一直就想寫的筆記了

在 javascript 裡面,往往有過大的彈性,到最後,龐大的專案,到最後模組之間關係,錯綜複雜

在加上團隊成員也有各自的組織風格,後至撰寫風格,加入 coffeescript,livescript 等,就算用 grunt 來組織 build 專案

也難掩架構變得複雜的事實

這裡要舉的筆記例子,對於初學者,我會建議,可以參考 Madhusudhan Srinivasa 大大的範例,由這一個範例去思考架構方式

https://github.com/madhums/node-express-mongoose-demo

我自己的偏好,則是折衷由 express 產生的預設架構,然後用 express.js 作者 TJ Holowaychuk 在影片中建議的模組方式來將不同功能的程式模組拆開,可以方便以資料夾的結構

將不同功能的元件分別使用在不同的專案,方便擴充

Modular web applications with Node.js and Express from tjholowaychuk on Vimeo.

expressjs conditional CSRF

現在一般基本的網路服務,為了安全性,會加上 CSRF 的保護,如果

用 ajax 的方式傳資料,一般可以跳過,或是,加在 ajax 的 header 裏面


在 Django 下面的話,如果不檢查的話,會加個 decorator @csrf_exempt

在 expressjs 下面,加 ajax header 是可行的,不過懶一點,目前 API 路徑的
請求,先跳過,以下筆記



/**
* Module dependencies.
*/

var express = require(’express’)
, csrf = express.csrf()
, fs = require(‘fs’)
, mongoStore = require(‘connect-mongo’)(express)
, flash = require(‘connect-flash’)
, helpers = require(‘view-helpers’)
, mongoose = require(‘mongoose’)
, http = require(‘http’)
, path = require(‘path’)
, i18n = require(‘i18n’);


// I olny cut the block of csrf setup

// adds CSRF support
if (process.env.NODE_ENV !== ’test’) {

// conditinal CSRF

var conditionalCSRF = function(req, res, next){

// bypass urlpath start with api and moreurl

if (! /^/(api|moreurl)/.test(req.path)){
csrf(req, res, next);
} else {
next();
}
}
//app.use(express.csrf());
app.use(conditionalCSRF);
}

// This could be moved to view-helpers :-)
app.use(function(req, res, next){
res.locals.csrf_token = req.session._csrf
next()
})


參考
http://stackoverflow.com/questions/13516898/disable-csrf-validation-for-some-requests-on-express

http://stackoverflow.com/questions/11200068/how-to-implement-csrf-protection-in-ajax-calls-using-express-js-looking-for-com

go get like npm

Go 下面想要安裝套件,可以像是用 node.jsnpm 安裝不加 global 的參數,做本地端的安裝嗎?

建立 shell script gopm 放在您的 $PATH 中的路徑

#!/bin/bash
# Uasge:
# gopm get some package from github
# gopm run yourmain.go
OLDGOPATH="$GOPATH"
export GOPATH=$PWD
go $*
export GOPATH="$OLDGOPATH"

或是都是在本地端開發,不太在意覆蓋原本的 GOPATH,直接像是加在 .bashrc 的環境裡

alias gopm=‘export GOPATH=pwd && go’

只要用 GOPATH 這一個環境變數,就可以達到了,所以這樣設定以後,執行的時候,就會用目前的資料夾當作,GOPATH ,套件也就都會安裝在執行時的目錄

執行程式測試的時候也一樣,假設叫 gopm ,就用 gopm run yourmain.go 就可以了

安裝需要的套件和 go get 一樣,例如在所在專案路徑安裝所有相依套件,原本打

go get

會裝到 GOROOT 路徑下

換成打

gopm get

因為加了目前專案路徑($PWD)為 GOPATH ,所以安裝到目前的資料夾下


PS: gopm 只是我自己隨便取的,文件及 source code 裡是有提到,不可以和 GOROOT 同一個資料夾,不過這不是廢話嗎 XD
UPDATE: 在 mail list 上面當小白後,GOPATH 不要去覆蓋他,會影響到整的 GO 環境 build 變數,以我目前的了解會用暫時覆蓋的方式,有比較好的方式再來更新

nodejs on raspberrypi

編譯和在 Linux 上面完全一樣,現在已經不需要什麼 patch 了

只是時間要約兩個小時


NPM package.json

NPMJS

一般不管什麼語言,幾乎都沒有內建套件管理,但是 Node.js 現在除了一直保持初衷,
要維持核心程式的精簡外,加入了 node 一直以來,必裝的 npm 套件管理,方便 node 的使用者,管理套件,及更新

所以 maybe node.js is not battery included but with charger.

參考資料

官方網站
http://npmjs.org/

原文
http://blog.nodejitsu.com/npm-cheatsheet
http://package.json.nodejitsu.com/

中文
http://dreamerslab.com/blog/tw/npm-basic-commands/

Get your Node

node.js

MEMO 一下 Debian testing 上面的 Node 安裝

實在進步太快了,裝 pre compiled 的套件沒有感覺

sudo apt-get install build-essential python-software-properties libssl-dev libreadline-dev git-core curl libcurl4-openssl-dev

記一下 libcurl4-openssl-dev # 只是目前 debian testing 上面依存的套件

git clone https://github.com/joyent/node.git
cd node
git checkout v0.6.6 # 目前最新的 release tag
./configure
make
sudo make install



發展快速,社群活躍,最重要就像的第四台老師有說得 Location, Location, Location

Node.js 是 Open, Open, Open (community, community, community, 內建的 npm 套件管理, 這一點夠方便吧)

想要變高,變帥,變聰明前,不要忘了,上場前,把 node.js 的傢伙戴上

http://www.webresourcesdepot.com/the-awesome-node-js-and-its-gang/

https://github.com/joyent/node/wiki/modules

參考
http://fred-zone.blogspot.com/2011/12/debian-nodejs-express.html

http://www.freshblurbs.com/install-node-js-and-express-js-nginx-debian-lenny


八卦一下,我的 VPS RAM 太小,本來是要說 Get your JVM,不過看起來,這一隻怪獸,還是要找多一點 RAM 的主機,才願意開始幹活

terry@atomvm:/node$ java -version
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
terry@atomvm:
/node$ node -v
v0.6.6