Posts for: #Express

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