Compare commits

...

1828 Commits
0.7.0 ... 2.3.8

Author SHA1 Message Date
Tj Holowaychuk
d7c6c9a9f9 Release 2.3.8 2011-05-24 21:53:08 -07:00
Tj Holowaychuk
9c87eed60e Fixed OPTIONS regression preventing custom routing for this method 2011-05-24 21:52:52 -07:00
Tj Holowaychuk
f15eb6d5ef added options test 2011-05-24 21:41:37 -07:00
Tj Holowaychuk
5b33788359 express-mongoose link 2011-05-24 08:45:44 -07:00
Tj Holowaychuk
11ec3ccd48 removed some old invalid docs
new stuff to come
2011-05-23 17:16:02 -07:00
Tj Holowaychuk
9d498ba3f1 misc 2011-05-23 16:59:16 -07:00
Tj Holowaychuk
15d4047180 link 2011-05-23 16:57:36 -07:00
Tj Holowaychuk
44eae73843 Release 2.3.7 2011-05-23 15:54:17 -07:00
Tj Holowaychuk
d5b1c70731 removed invalidParamReturnValue() 2011-05-23 15:48:58 -07:00
Tj Holowaychuk
e78dc18cfd Removed app.param() callback with retval support
this is now abstract and will be going into express-params
along with some other cases
2011-05-23 15:40:41 -07:00
Tj Holowaychuk
4d122923e9 docs 2011-05-23 15:33:40 -07:00
Tj Holowaychuk
b1a7310263 Added support for app.param(fn) to define param logic 2011-05-23 15:30:34 -07:00
Tj Holowaychuk
d6ef90d98d Moved param() retval logic to Router#param() 2011-05-23 15:06:59 -07:00
Tj Holowaychuk
85df59ac31 comma first 2011-05-23 14:56:35 -07:00
Tj Holowaychuk
b789a28581 refactored with nextRoute() 2011-05-23 14:52:43 -07:00
Tj Holowaychuk
4068e7f444 added route Collection tests 2011-05-23 14:13:31 -07:00
Tj Holowaychuk
80e9ffbf5d Refactored router. Closes #639 2011-05-23 13:48:31 -07:00
Tj Holowaychuk
610fc92ca3 arity < 3 considered return-style param 2011-05-23 09:52:11 -07:00
Tj Holowaychuk
0f5dc9bdb2 Added checking of app.param() fn retval
functions returning NaN, == null, or === false are considered
a failure and the next route is executed
2011-05-23 09:38:01 -07:00
TJ Holowaychuk
c24b2faec5 Merge pull request #671 from jpalardy/patch-1
Documentation typo :uri -> :url for logger()
2011-05-22 10:18:01 -07:00
Jonathan Palardy
c407f58dc2 :uri -> :url
Example won't work otherwise. I checked the code :-)
2011-05-21 23:17:57 -07:00
Tj Holowaychuk
380da0e202 Removed module.parent check from express(1) generated app. Closes #670 2011-05-21 14:17:24 -07:00
Tj Holowaychuk
9e5e7a1526 added more route tests 2011-05-20 15:46:36 -07:00
Tj Holowaychuk
9016b5aaae added more route tests 2011-05-20 15:46:05 -07:00
Tj Holowaychuk
45f168e873 Release 2.3.6 2011-05-20 09:42:01 -07:00
Tj Holowaychuk
799938683d Merge branch 'refactor/dev-deps' 2011-05-20 09:39:34 -07:00
Tj Holowaychuk
7128f2d11f fixed last examples 2011-05-20 09:39:29 -07:00
Tj Holowaychuk
0634bf0b0d fixed redis example 2011-05-20 09:38:52 -07:00
Tj Holowaychuk
f9e48c2972 fixed markdown example 2011-05-20 09:29:22 -07:00
Tj Holowaychuk
909960c0b3 refactoring examples more 2011-05-20 09:26:47 -07:00
Tj Holowaychuk
8a7876f4d1 cleaning up examples 2011-05-20 09:16:35 -07:00
Tj Holowaychuk
286c92b13b docs 2011-05-20 09:15:39 -07:00
Tj Holowaychuk
b9872a278f docs 2011-05-20 09:15:35 -07:00
Tj Holowaychuk
1b34fd7efa misc 2011-05-20 09:11:15 -07:00
Tj Holowaychuk
f05c351762 Fixed view caching, should not be enabled in development 2011-05-20 09:01:05 -07:00
Tj Holowaychuk
8323f19e96 fixing examples 2011-05-20 08:56:25 -07:00
Tj Holowaychuk
565eda9ee5 docs 2011-05-20 08:40:26 -07:00
Tj Holowaychuk
7aea7194d1 example docs 2011-05-20 08:39:43 -07:00
Tj Holowaychuk
2f68957c8c fixed tests 2011-05-20 08:37:23 -07:00
Tj Holowaychuk
4ca848e526 ignore node_modules 2011-05-20 08:35:20 -07:00
Tj Holowaychuk
31a8c7c19c test docs 2011-05-20 08:35:11 -07:00
Tj Holowaychuk
f1c435e050 removed support submods 2011-05-20 08:31:13 -07:00
Tj Holowaychuk
fac75a9bff connect 1.4.1 2011-05-20 08:29:02 -07:00
Tj Holowaychuk
4fe03ab223 dev deps 2011-05-20 08:28:02 -07:00
TJ Holowaychuk
c6122da59b Merge pull request #668 from joemccann/master
Simple Update to Markdown example
2011-05-20 08:07:21 -07:00
Tj Holowaychuk
131f658779 Release 2.3.5 2011-05-20 07:32:16 -07:00
Joe McCann
127f77964e Updated markdown example to latest version of node-markdown and modified the compile method. 2011-05-20 09:16:53 -05:00
Tj Holowaychuk
9f2bd30dc7 router.routes 2011-05-19 18:36:41 -07:00
Tj Holowaychuk
6e633b31b4 return bool from req.is() 2011-05-19 09:48:19 -07:00
Tj Holowaychuk
1c65643488 more tests 2011-05-18 17:41:15 -07:00
Tj Holowaychuk
388ad9067a tweak tests 2011-05-17 13:59:24 -07:00
Tj Holowaychuk
f470f0bdc5 export .view as alias for .View
reads better:

   express.view.lookup(...)
2011-05-16 16:27:17 -07:00
Tj Holowaychuk
72384b0523 misc refactor of res.partial() 2011-05-16 15:29:20 -07:00
Tj Holowaychuk
1b199b7d98 lookup docs 2011-05-16 15:26:12 -07:00
Tj Holowaychuk
09b384ea44 Merge branch 'refactor/views' 2011-05-16 15:20:26 -07:00
Tj Holowaychuk
56ae55f987 keep duplicates out of view resolution hint 2011-05-16 15:20:08 -07:00
Tj Holowaychuk
1c360a89ba added views.compile(view, cache, cid, options)
private for now
2011-05-16 15:17:06 -07:00
Tj Holowaychuk
8636dee13e docs 2011-05-16 14:28:11 -07:00
Tj Holowaychuk
70e6baf6fc misc refactoring 2011-05-16 09:32:53 -07:00
Tj Holowaychuk
3588c1eedc docs 2011-05-16 09:27:16 -07:00
Tj Holowaychuk
8d6f167a81 added better middleware docs and use-cases 2011-05-16 09:24:53 -07:00
Tj Holowaychuk
6106188347 docs 2011-05-15 18:01:47 -07:00
Tj Holowaychuk
eeb77541cd Updated jade submodule 2011-05-14 11:53:26 -07:00
Tj Holowaychuk
99b244b47c export View 2011-05-13 19:38:23 -07:00
Tj Holowaychuk
3043672448 added exports.lookup(view, options) to view.js
private for now
2011-05-13 19:37:11 -07:00
Tj Holowaychuk
0477a53c9f misc refactor 2011-05-13 15:47:48 -07:00
Tj Holowaychuk
d9aa7c3bc9 Release 2.3.4 2011-05-08 10:53:57 -07:00
Tj Holowaychuk
986fac583b Merge branch 'master' of github.com:visionmedia/express 2011-05-08 10:52:59 -07:00
Tj Holowaychuk
c6d76086e2 Fixed res.sendfile() bug preventing the transfer of files with spaces
params are decoded so we need to encode before passing to send() which then
in turn decodes it again, however nodes url module chokes on the spaces.
2011-05-08 10:52:16 -07:00
Tj Holowaychuk
e2771364eb Updated connect submodule 2011-05-08 10:45:42 -07:00
Tj Holowaychuk
0d5a63798b added failing test with spaces in filename 2011-05-08 10:40:37 -07:00
TJ Holowaychuk
7d15e2bf52 Merge pull request #653 from darrentorpey/patch-1.
Fixed a typo: "A route is simple a string" => "A route is simply a string
2011-05-04 09:35:49 -07:00
Darren Torpey
31fef407b6 Fixed a typo: "A route is simple a string" => "A route is simply a string" 2011-05-04 04:14:40 -07:00
Tj Holowaychuk
6bef3ef891 misc 2011-05-03 16:48:17 -07:00
Tj Holowaychuk
b806846049 misc 2011-05-03 16:44:17 -07:00
Tj Holowaychuk
bc16020976 added stupid say example 2011-05-03 16:40:20 -07:00
Tj Holowaychuk
8afb905a43 Release 2.3.3 2011-05-03 11:31:16 -07:00
Tj Holowaychuk
53667728a8 Fixed route-specific middleware when using the same callback function several times 2011-05-03 11:28:33 -07:00
Tj Holowaychuk
5f0a854e29 added test for route specific middleware regression 2011-05-03 11:25:54 -07:00
Tj Holowaychuk
e9ef3dd9cd ws 2011-05-03 09:41:59 -07:00
Tj Holowaychuk
f702884704 split methods supported by rfc [slaskis] 2011-05-03 09:24:51 -07:00
Tj Holowaychuk
0cb866845d npm 1.x docs 2011-05-02 12:48:45 -07:00
Tj Holowaychuk
26483029db docs for next("route"). Closes #650 2011-05-01 11:06:37 -07:00
Tj Holowaychuk
d2adcbdf67 Added "case sensitive routes" option. 2011-04-29 16:41:20 -07:00
Tj Holowaychuk
d2f963db2a fixed tests 2011-04-29 16:34:22 -07:00
TJ Holowaychuk
fc2bc1362f Merged pull request #645 from 8bitDesigner/patch-1.
Incorrect reference to template in a comment
2011-04-27 18:56:00 -07:00
8bitDesigner
6ae45d0fd3 The comment here refers to using "jade" for layouts, but you're using "ejs" instead. 2011-04-27 16:11:39 -07:00
Tj Holowaychuk
cc185a8c0e Release 2.3.2 2011-04-27 09:12:54 -07:00
Tj Holowaychuk
ae1078944c Fixed view hints
populate attempts on new View
2011-04-27 09:07:56 -07:00
Tj Holowaychuk
385a05dd10 bump 2011-04-26 15:26:24 -07:00
Tj Holowaychuk
2572a78648 Release 2.3.1 2011-04-26 15:26:04 -07:00
Tj Holowaychuk
470774cfba Fixed template caching collision issue. Closes #644
the parent view is resolved first so we always have the absolute path
available, so this should prevent collisions.
2011-04-26 15:24:31 -07:00
Tj Holowaychuk
351f6abe4c Merge branch 'refactor/router' 2011-04-26 14:36:51 -07:00
Tj Holowaychuk
53a16e1795 Added app.match() as app.match.all() 2011-04-26 13:59:59 -07:00
Tj Holowaychuk
ff77c8b205 Added app.lookup() as app.lookup.all() 2011-04-26 13:59:37 -07:00
Tj Holowaychuk
b33f38b109 Added app.remove() for app.remove.all() 2011-04-26 13:58:43 -07:00
Tj Holowaychuk
b9596d7ce8 Added app.remove.VERB() 2011-04-26 13:57:05 -07:00
Tj Holowaychuk
251175c025 test for previous commit 2011-04-26 13:30:47 -07:00
Tj Holowaychuk
fda1bc4630 moved fn.params to route.params 2011-04-26 13:30:21 -07:00
Tj Holowaychuk
83c2c176a9 misc 2011-04-26 13:28:20 -07:00
Tj Holowaychuk
9be5992f22 misc refactoring 2011-04-26 13:26:49 -07:00
Tj Holowaychuk
d8d23c0bf8 misc 2011-04-26 13:21:19 -07:00
Tj Holowaychuk
b2689fc40e docs 2011-04-26 13:16:19 -07:00
Tj Holowaychuk
a4cfde350f moved more tests 2011-04-26 13:14:21 -07:00
Tj Holowaychuk
7374027457 added router.test.js 2011-04-26 13:13:07 -07:00
Tj Holowaychuk
63328c2177 added .index to match() retvals 2011-04-26 13:01:53 -07:00
Tj Holowaychuk
c4e2ce23e5 more Route tests 2011-04-26 12:59:25 -07:00
Tj Holowaychuk
dacad53b2e Added instancoef Route test 2011-04-26 12:57:14 -07:00
Tj Holowaychuk
4ffd5280a7 expose Route 2011-04-26 12:55:31 -07:00
Tj Holowaychuk
74310fb464 misc refactoring 2011-04-26 12:53:57 -07:00
Tj Holowaychuk
8b2268cf38 Started Route implementation 2011-04-26 12:41:05 -07:00
Tj Holowaychuk
fb655f4981 added lib/router/methods.js 2011-04-26 11:49:51 -07:00
Tj Holowaychuk
7208c33d72 refactored view.js 2011-04-26 11:40:44 -07:00
Tj Holowaychuk
4efb25d048 refactored https.js 2011-04-26 11:39:09 -07:00
Tj Holowaychuk
a3678cd7f6 refactored http.js 2011-04-26 11:34:41 -07:00
Tj Holowaychuk
393d38f1ab stubbed Route 2011-04-26 11:31:31 -07:00
Tj Holowaychuk
805b9ac3a9 docs for "view cache" setting 2011-04-25 12:06:20 -07:00
Tj Holowaychuk
379b9812be refactored options() helper 2011-04-25 10:26:08 -07:00
Tj Holowaychuk
a9992b5647 docs 2011-04-25 10:19:13 -07:00
Tj Holowaychuk
b6c0a9b1b5 moved router to router/index 2011-04-25 10:17:13 -07:00
Tj Holowaychuk
1d2dd2a375 Merge branch 'feature/router' 2011-04-25 10:13:46 -07:00
Tj Holowaychuk
63db694aa2 utilizing local router 2011-04-25 10:13:30 -07:00
Tj Holowaychuk
b6aca36ad9 htmlEscape -> escape 2011-04-25 10:11:38 -07:00
Tj Holowaychuk
8420ae93fd removed old path utils 2011-04-25 10:10:43 -07:00
Tj Holowaychuk
6722716fa7 Moved router over from connect 2011-04-25 10:08:54 -07:00
Tj Holowaychuk
658e064220 Release 2.3.0 2011-04-25 09:49:54 -07:00
Tj Holowaychuk
66b472e567 connect >= 1.4.0 2011-04-25 09:32:57 -07:00
Tj Holowaychuk
3d242a607e Fixed caching of views when using several apps. Closes #637
simple fix :)
2011-04-25 09:25:23 -07:00
Tj Holowaychuk
bc68e5e7a3 misc 2011-04-25 09:20:31 -07:00
Tj Holowaychuk
aa6858189c misc refactor 2011-04-23 18:54:49 -07:00
Tj Holowaychuk
06fda62c9e Merge branch 'refactor/route-middleware' 2011-04-22 16:49:04 -07:00
Tj Holowaychuk
5688ea650d Fixed gotcha invoking app.param() callbacks once per route middleware. Closes #638 2011-04-22 16:48:54 -07:00
Tj Holowaychuk
f5c4e9d612 Updated connect submodule 2011-04-22 16:34:42 -07:00
Tj Holowaychuk
b9eda2a59d Updated connect submodule 2011-04-22 16:11:13 -07:00
Tj Holowaychuk
8c168b0971 connect >= 1.3.1 < 2.0.0 2011-04-22 16:11:07 -07:00
Tj Holowaychuk
9c20a50ee2 Added failing test for gotcha 2011-04-22 14:44:08 -07:00
Tj Holowaychuk
eac666574e viewHelpers -> _locals 2011-04-21 08:26:30 -07:00
Tj Holowaychuk
e4c840f6b8 Added res.helpers() as alias of res.locals()
to match app.locals() / app.helpers()
2011-04-20 15:26:22 -07:00
Daniel Shaw
3afbcd0acf JSON and JSONP default to UTF-8 in the same way as HTML. Closes #632.
Signed-off-by: Tj Holowaychuk <tj@vision-media.ca>
2011-04-20 09:00:02 -07:00
Daniel Shaw
8f054dbcaf JSON and JSONP default to UTF-8 in the same way as HTML. Introduces app.set('charset') to set charset default at the application level. Closes #632.
Signed-off-by: Tj Holowaychuk <tj@vision-media.ca>
2011-04-20 09:00:02 -07:00
Tj Holowaychuk
ccc39e5aa2 Fixed partial lookup precedence. Closes #631 2011-04-19 10:23:16 -07:00
Tj Holowaychuk
53d4da2a9c Added failing partial precedence test 2011-04-19 10:19:45 -07:00
Tj Holowaychuk
d9e7153fc9 Renamed "cache views" to "view cache". Closes #628 2011-04-17 16:42:03 -07:00
Tj Holowaychuk
dc02b0d5ae Added options support to res.clearCookie() 2011-04-17 16:37:16 -07:00
Aaron Heckmann
e0bc5711b8 auto set Content-Type in res.attachement
Signed-off-by: Tj Holowaychuk <tj@vision-media.ca>
2011-04-14 13:48:22 -07:00
Tj Holowaychuk
957cf45fa1 Release 2.2.2 2011-04-12 02:44:47 -07:00
Tj Holowaychuk
f4487343df Fixed filename option passing to template engine 2011-04-12 02:43:03 -07:00
Tj Holowaychuk
ca1bdb31e3 Updated jade submodule 2011-04-12 02:41:30 -07:00
Tj Holowaychuk
236a412459 docs 2011-04-11 09:46:28 -07:00
Tj Holowaychuk
759a57bdb6 Added second callback support for res.download() connection errors
since you can no longer respond, it will be helpful to have separate callbacks
2011-04-11 09:44:19 -07:00
Tj Holowaychuk
1abb674a07 temp fix for nodes res.removeHeader() after sent "bug" 2011-04-11 09:14:11 -07:00
Tj Holowaychuk
961146a287 link to express-expose 2011-04-08 17:51:41 -07:00
Tj Holowaychuk
573f940985 fixed example hasMessages
sessions are not always available
2011-04-08 12:44:03 -07:00
Tj Holowaychuk
882916bb2e Updated jade submodule 2011-04-08 12:36:41 -07:00
Tj Holowaychuk
47d1c62732 Updated connect submodule 2011-04-08 12:36:35 -07:00
Tj Holowaychuk
d39293c025 refactor 2011-04-08 12:36:26 -07:00
Tj Holowaychuk
2942dafdfd >= connect 1.2.3 2011-04-05 11:25:16 -07:00
Tj Holowaychuk
4e1aefa5b5 Release 2.2.1 2011-04-04 12:23:37 -07:00
Tj Holowaychuk
89383ecc57 misc refactoring 2011-04-03 14:27:40 -07:00
Tj Holowaychuk
08046f7692 Added better partial() object collection support
only respecting .length is fine in some cases, but
if the object has a length and has holes, it will likely
produce an unexpected result, or an undefined local in the
render call, which may some times be ideal, but most likely not.

this change allows arbitrary objects to be passed to "collection: ",
however unfortunately there is no way to arbitrarily assume the object
is a collection without passing it as the option
2011-04-03 14:27:05 -07:00
Tj Holowaychuk
885fb1fa92 docs 2011-04-01 17:55:26 -07:00
Tj Holowaychuk
6a58c71528 Merge branch 'feature/view-layout-control' 2011-04-01 17:47:11 -07:00
Tj Holowaychuk
371d66ba2a Added layout(path) helper to change the layout within a view. Closes #610 2011-04-01 17:47:03 -07:00
Tj Holowaychuk
25bddf3fb5 added layout control example 2011-04-01 17:39:18 -07:00
Tj Holowaychuk
f6e9fb13f8 Removed "request" and "response" locals
sorry, changed my mind. easy enough to expose these if you want to,
but they are to large by default
2011-04-01 17:25:05 -07:00
Tj Holowaychuk
f0df8434e7 markdown escaping 2011-03-31 08:24:43 -07:00
Tj Holowaychuk
e4d3f239e5 Updated connect submodule 2011-03-30 22:01:16 -07:00
Tj Holowaychuk
bcc22dfa6f Updated connect submodule 2011-03-30 21:59:17 -07:00
Tj Holowaychuk
f614709a01 errorHandler title 2011-03-30 21:59:15 -07:00
Tj Holowaychuk
11250d22c9 misc refactoring 2011-03-30 21:44:21 -07:00
Tj Holowaychuk
4b4de29725 Performance improved with better view caching
the entire View object is now cached in-memory, along with the lookup
logic as well. This increases rendering (with jade at least) by about 260 rps
2011-03-30 21:40:05 -07:00
Tj Holowaychuk
99b49d2718 updated docs 2011-03-30 12:11:22 -07:00
Tj Holowaychuk
6230ec55be more docs 2011-03-30 12:02:14 -07:00
Tj Holowaychuk
0733d3c585 connect 1.2.0 2011-03-30 11:58:26 -07:00
Tj Holowaychuk
6f8370ff0e Updated connect submodule 2011-03-30 11:58:09 -07:00
Tj Holowaychuk
bc244ed07e docs for app.match.VERB() 2011-03-30 11:56:14 -07:00
Tj Holowaychuk
41266aa8e4 docs for app.lookup.VERB() 2011-03-30 11:49:21 -07:00
Tj Holowaychuk
45faee3e5b Release 2.2.0 2011-03-30 11:40:47 -07:00
Tj Holowaychuk
74ff735e10 Updated haml submodule 2011-03-30 11:00:47 -07:00
Tj Holowaychuk
97879f2b16 Updated formidable submodule 2011-03-30 11:00:43 -07:00
Tj Holowaychuk
1a338251ad Updated connect-form submodule 2011-03-30 11:00:34 -07:00
Tj Holowaychuk
354dc768c1 Updated jade submodule 2011-03-30 11:00:25 -07:00
Tj Holowaychuk
8a0796cd94 Updated ejs submodule 2011-03-30 11:00:21 -07:00
Tj Holowaychuk
cbc3b26584 changed express(1) --help 2011-03-30 10:58:01 -07:00
Tj Holowaychuk
d628583db8 removed colors from express(1) 2011-03-30 10:56:11 -07:00
Tj Holowaychuk
058777be1e connect >= 1.1.6 2011-03-29 18:11:00 -07:00
Tj Holowaychuk
260d03a0c4 Merge branch 'feature/route-lookup' 2011-03-29 18:04:49 -07:00
Tj Holowaychuk
6dcf6f41cc Added app.VERB() -> [Function...], app.lookup.VERB(), and app.match.VERB(). Closes #606 2011-03-29 18:04:43 -07:00
Tj Holowaychuk
799f790886 Updated connect submodule 2011-03-29 17:40:14 -07:00
Tj Holowaychuk
cb3c4b0ea9 Updated connect submodule 2011-03-29 17:38:39 -07:00
Tj Holowaychuk
798d255ba6 Release 2.1.1 2011-03-29 10:40:26 -07:00
Tj Holowaychuk
28ba9e8ac5 Fixed res.partial(); next(err) when no callback is given [reported by aheckmann] 2011-03-29 09:56:58 -07:00
Tj Holowaychuk
7888cb0506 docs 2011-03-29 09:51:38 -07:00
Tj Holowaychuk
5e284a20cc Updated connect submodule 2011-03-29 09:49:45 -07:00
Tj Holowaychuk
770357e727 Updated expresso submodule 2011-03-29 09:49:18 -07:00
Aaron Heckmann
673ba22555 res.send(undefined) returns a 204
closes #600

Signed-off-by: Tj Holowaychuk <tj@vision-media.ca>
2011-03-29 08:52:36 -07:00
Aaron Heckmann
fb38d9cfb7 add test for res.send(undefined)
Signed-off-by: Tj Holowaychuk <tj@vision-media.ca>
2011-03-29 08:52:34 -07:00
Aaron Heckmann
dda89a57ec ignore .swo .swp
Signed-off-by: Tj Holowaychuk <tj@vision-media.ca>
2011-03-29 08:52:34 -07:00
Tj Holowaychuk
62df63d3a0 doc typo 2011-03-29 08:39:35 -07:00
Tj Holowaychuk
e71696cf34 expose err.view when failing to locate a view
allows for:

   err.view.path

etc
2011-03-28 14:44:12 -07:00
Tj Holowaychuk
b5d8d58670 repo 2011-03-27 14:23:43 -07:00
Tj Holowaychuk
14e6a667f5 Release 2.1.0 2011-03-24 13:47:38 -07:00
Tj Holowaychuk
0c324783ae Merge branch 'feature/root-partial-lookup' 2011-03-24 13:34:02 -07:00
Tj Holowaychuk
5d6ce251ca Added <root>/_<name> partial lookup support 2011-03-24 13:33:52 -07:00
Tj Holowaychuk
92c04cee1d Added; partial lookup relative to view root. Closes #447
for example when nested deep, if you have a
partial located at ./views/messages.jade

partial("messages");

will still work
2011-03-24 13:26:32 -07:00
Tj Holowaychuk
7fdf587a7b added test for root partial lookup 2011-03-24 13:21:23 -07:00
Tj Holowaychuk
1e46218b09 doc typo 2011-03-24 11:46:40 -07:00
Tj Holowaychuk
c56fcd8fb9 better --help output 2011-03-22 13:00:36 -07:00
Tj Holowaychuk
319fbf7f64 Added "request", "response", and "app" locals 2011-03-22 12:16:58 -07:00
Tj Holowaychuk
bf06d9077c docs for "filename" local 2011-03-22 12:14:08 -07:00
Tj Holowaychuk
9d2bd29ee1 Added 'settings' local variable, containing the app's settings 2011-03-22 12:06:19 -07:00
Tj Holowaychuk
d11fa1f74e added .settings test 2011-03-22 12:02:57 -07:00
Tj Holowaychuk
c824da0dab test indentation 2011-03-22 11:59:29 -07:00
Tj Holowaychuk
9362c83a33 removed dead test 2011-03-22 11:59:05 -07:00
Tj Holowaychuk
0c38098f02 tweak req.flash() failure message 2011-03-21 16:13:40 -07:00
Pau Ramon
be7068f569 Better error output when using flash without session middleware. 2011-03-21 16:12:55 -07:00
Tj Holowaychuk
b122bf22e3 link typo 2011-03-21 12:06:36 -07:00
Tj Holowaychuk
b7232f38f3 Added res.send(bool) support
application/json
2011-03-21 10:34:04 -07:00
Tj Holowaychuk
c1b72ac1b7 Fixed stylus example for latest version 2011-03-21 08:45:43 -07:00
Roman Shtylman
b9e0d15878 check that this.params is valid before calling hasOwnProperty 2011-03-21 08:13:05 -07:00
Tj Holowaychuk
cf26cf7afc wrap try/catch around render() 2011-03-18 11:44:48 -07:00
Tj Holowaychuk
a75e60ae47 fixed docs due to markdown-js not supporting html 2011-03-18 09:18:29 -07:00
Tj Holowaychuk
187dc5dd03 connect 1.1.1 2011-03-18 08:49:59 -07:00
Tj Holowaychuk
9c9e2afade refactored res.redirect() 2011-03-18 08:49:46 -07:00
Tj Holowaychuk
fae1ba98c1 doc typo 2011-03-17 19:05:59 -07:00
Tj Holowaychuk
c3e632620a doc typo 2011-03-17 19:05:28 -07:00
Tj Holowaychuk
dd7158ac46 regenerated docs 2011-03-17 18:56:44 -07:00
Tj Holowaychuk
eefe51c7a7 removed manpages from make 2011-03-17 18:55:13 -07:00
Tj Holowaychuk
bf596dc023 Release 2.0.0 2011-03-17 18:06:30 -07:00
Tj Holowaychuk
220d88d654 Fixed up index view path alternative
previously was doing ../index, which was not intended
now doing ../VIEW/index
2011-03-17 15:36:44 -07:00
Tj Holowaychuk
a254e64bdb Changed; res.locals() without object returns the locals 2011-03-17 14:50:35 -07:00
Tj Holowaychuk
1555b92fb8 Release 2.0.0rc3 2011-03-17 13:01:59 -07:00
Tj Holowaychuk
d5b7a40b39 Fixed partials example 2011-03-17 13:00:43 -07:00
Tj Holowaychuk
bd1ab7ab96 pass the function 2011-03-17 12:48:06 -07:00
Tj Holowaychuk
2ff991bfcf refactored res.render() 2011-03-17 12:45:11 -07:00
Tj Holowaychuk
0b1378a539 Added res.locals(obj) 2011-03-17 12:13:59 -07:00
Tj Holowaychuk
723c908bd7 Added res.partial() callback support 2011-03-17 12:10:32 -07:00
Tj Holowaychuk
4874404701 typo 2011-03-17 11:33:35 -07:00
Tj Holowaychuk
4c1374840a Release 2.0.0rc2 2011-03-17 11:01:20 -07:00
Tj Holowaychuk
5da01633fd Fixed SlowBuffer support. Closes #584 2011-03-17 10:37:34 -07:00
Tj Holowaychuk
cdbd8af527 migration docs for partials 2011-03-17 09:31:32 -07:00
Tj Holowaychuk
a6fdc1bfd2 Fixed .filename view engine option [reported by drudge] 2011-03-16 16:58:02 -07:00
Tj Holowaychuk
20b8facb05 docs for partial changes 2011-03-16 15:53:27 -07:00
Tj Holowaychuk
909914f7af Changed; partial() "locals" are now optional
this means that:

   partial("user", { name: "tj" })

with the intent of receiving "user" instead of "name" in this
case is invalid, "name" here is a local, however passing a non-plain
object such as a User object is fine:

    partial("user", new User("tj"));
2011-03-16 15:37:05 -07:00
Tj Holowaychuk
3f31ebc676 fixed express-contrib example reference 2011-03-15 15:23:28 -07:00
Tj Holowaychuk
f3c068a90c Merge branch 'integration' 2011-03-15 10:52:58 -07:00
Tj Holowaychuk
90d7e193d1 Refactored Server#use()
eventually we should just emit some events from connect
2011-03-15 10:52:53 -07:00
Tj Holowaychuk
c9f5bb6f17 added .app test for the mounted server as well 2011-03-15 10:39:59 -07:00
Ben Weaver
9865a4c4f2 Clean up patch to Server#use(), add test case for restoring res#app property. 2011-03-15 10:37:18 -07:00
Ben Weaver
f12baf32d4 Restore original res.app when out() is called. 2011-03-15 10:37:18 -07:00
Tj Holowaychuk
80f4d08e8b Release 2.0.0rc 2011-03-14 15:01:37 -07:00
Tj Holowaychuk
07c9cae923 Fixed; expose HTTPSServer constructor 2011-03-14 14:36:22 -07:00
Tj Holowaychuk
d867cc9271 Fixed express(1) default test charset. Cloeses #579 [reported by secoif] 2011-03-13 10:15:53 -07:00
Tj Holowaychuk
3a1fe1e295 Fixed; default charset to utf-8 instead of utf8 for lame IE [reported by NickP] 2011-03-11 16:34:41 -08:00
Tj Holowaychuk
3cacf050df Docs for staticProvider() changes 2011-03-11 14:11:45 -08:00
Tj Holowaychuk
1536d73d1b Release 2.0.0beta3 2011-03-09 15:45:55 -08:00
Tj Holowaychuk
55143a9d44 Updated connect submodule 2011-03-09 15:39:10 -08:00
Tj Holowaychuk
c92e193916 Fixed res.redirect(). RFC states absolute 2011-03-09 15:18:22 -08:00
Tj Holowaychuk
d12452fc49 docs for charset 2011-03-09 10:59:47 -08:00
Tj Holowaychuk
3d8400a40c docs for res.contentType() literal 2011-03-09 10:54:35 -08:00
Tj Holowaychuk
1fe0aea0b0 Added test for res.contentType() literal 2011-03-09 10:53:50 -08:00
Tj Holowaychuk
5df2544883 fixed a test 2011-03-09 10:46:59 -08:00
Tj Holowaychuk
acbf224277 default res.send() string charset to utf8 2011-03-09 10:42:14 -08:00
Tj Holowaychuk
d0d17a0d35 charset tests using ISO-8859-1 2011-03-09 10:33:28 -08:00
Tj Holowaychuk
f7b53d33bc more tests 2011-03-09 10:33:06 -08:00
Tj Holowaychuk
92be06874b more tests 2011-03-09 10:31:45 -08:00
Tj Holowaychuk
f327455d9d Added charset option for render() 2011-03-09 10:31:10 -08:00
Tj Holowaychuk
54415bf2af moved a test 2011-03-09 10:29:03 -08:00
Tj Holowaychuk
bac62dfcd9 added charset test with res.render() 2011-03-09 10:26:37 -08:00
Tj Holowaychuk
820b43c1f3 Added .charset + res.send() test 2011-03-09 10:23:05 -08:00
Tj Holowaychuk
a5b69290d5 fixed a test 2011-03-09 10:20:44 -08:00
Tj Holowaychuk
5c7a9c86f6 Updated connect submodule 2011-03-09 10:20:03 -08:00
Tj Holowaychuk
7f83f916f6 Updated jade submodule 2011-03-09 09:46:47 -08:00
Masahiro Hayashi
c15a949cc3 Updated express command
- Fixed a genereated test's bug
- Added a forgotten semicolon
2011-03-08 13:42:06 -08:00
Tj Holowaychuk
ce47f96570 dont change NODE_ENV in tests 2011-03-08 13:39:30 -08:00
Tj Holowaychuk
57b035cd94 hinting at fully resolved paths 2011-03-08 12:58:16 -08:00
Tj Holowaychuk
f1f126171c Added view resolution hints when in development 2011-03-08 12:51:40 -08:00
Tj Holowaychuk
71e1bcd855 fixed a test 2011-03-08 12:02:35 -08:00
Tj Holowaychuk
b5579b6307 Added layout lookup support relative to the page view
for example if you render ./views/forum/thread and
./views/forum/thread/layout.jade exists, it will be used,
falling back on ./views/layout.jade.
2011-03-08 12:01:45 -08:00
Tj Holowaychuk
110b0fe14a misc refactor 2011-03-08 11:47:03 -08:00
Tj Holowaychuk
d7488bbb62 Removed Partial constructor (not used) 2011-03-08 11:42:03 -08:00
Tj Holowaychuk
2007407e7b docs 2011-03-08 09:56:24 -08:00
Tj Holowaychuk
d152e7e780 Added res.render() status support back
useful for error templates that display the status _and_
set the status code
2011-03-08 09:56:05 -08:00
Tj Holowaychuk
d4f4b6682d Release 2.0.0beta2 2011-03-07 09:40:39 -08:00
Tj Holowaychuk
7f4a12f4cd Added regular css file to stylus example 2011-03-07 09:34:41 -08:00
Tj Holowaychuk
07d06adf86 Added res.render() .locals support back to aid in migration process 2011-03-07 09:15:36 -08:00
Tj Holowaychuk
47dc188d57 Updated jade submodule 2011-03-04 18:33:29 -08:00
Tj Holowaychuk
85d22541d2 Fixed flash example 2011-03-04 11:18:19 -08:00
Tj Holowaychuk
90ec1031f9 typo in flash example 2011-03-04 11:03:47 -08:00
Tj Holowaychuk
9bc9ad13a4 < connect 2.0.0 2011-03-04 08:52:15 -08:00
Tj Holowaychuk
1782c7d778 regenerated docs 2011-03-04 08:46:55 -08:00
Tj Holowaychuk
e85752c527 Add haml back in docs 2011-03-04 08:44:35 -08:00
Tj Holowaychuk
dfdbbb514f haml working fine 2011-03-04 08:43:52 -08:00
Tj Holowaychuk
976f5ca93e Updated haml submodule 2011-03-04 08:43:07 -08:00
Tj Holowaychuk
2086f8d34c beta in express --version 2011-03-03 17:16:25 -08:00
Tj Holowaychuk
6873a68216 changelog typo 2011-03-03 16:34:05 -08:00
Tj Holowaychuk
9eb2c61760 docs 2011-03-03 16:15:17 -08:00
Tj Holowaychuk
543e791206 docs 2011-03-03 16:13:20 -08:00
Tj Holowaychuk
b6e8b3fa84 added express-namespace link 2011-03-03 16:10:38 -08:00
Tj Holowaychuk
6f8e406b7b added express-messages link 2011-03-03 16:08:52 -08:00
Tj Holowaychuk
93bc54b65c added express-configure link 2011-03-03 16:07:22 -08:00
Tj Holowaychuk
3bf0ac4a36 added express-resource link 2011-03-03 16:05:49 -08:00
Tj Holowaychuk
bc01bfff21 connect docs 2011-03-03 16:02:27 -08:00
Tj Holowaychuk
0d4eaf03fc Added make site 2011-03-03 15:59:47 -08:00
Tj Holowaychuk
2bb0412473 docs 2011-03-03 15:49:34 -08:00
Tj Holowaychuk
07ce5d3158 docs for res.render() and res.partial() 2011-03-03 15:49:30 -08:00
Tj Holowaychuk
131970b3e5 docs 2011-03-03 15:39:44 -08:00
Tj Holowaychuk
00e1dbfbd9 docs for res.cookie() 2011-03-03 15:30:43 -08:00
Tj Holowaychuk
4c274c524d Added res.cookie() maxAge support 2011-03-03 15:27:03 -08:00
Tj Holowaychuk
5581ca2751 docs 2011-03-03 15:07:35 -08:00
Tj Holowaychuk
5cd9a9540f docs 2011-03-03 14:40:47 -08:00
Tj Holowaychuk
1db2efa75a docs 2011-03-03 14:39:10 -08:00
Tj Holowaychuk
c1a82bf3ea docs 2011-03-03 14:18:42 -08:00
Tj Holowaychuk
7705042cac docs 2011-03-03 13:31:09 -08:00
Tj Holowaychuk
b9e311e893 version docs 2011-03-03 13:26:31 -08:00
Tj Holowaychuk
460998497d docs 2011-03-03 13:25:31 -08:00
Tj Holowaychuk
022c5e1411 note on locals 2011-03-03 13:10:50 -08:00
Tj Holowaychuk
60daf0d6c7 Ignore .DS_Store 2011-03-03 12:53:34 -08:00
Tj Holowaychuk
0b6a941624 more docs 2011-03-03 12:47:01 -08:00
Tj Holowaychuk
1fc520b45a Fixed partial() issue where the parent locals clobber those given directly 2011-03-03 12:44:37 -08:00
Tj Holowaychuk
cbbee38be8 Added more view examples 2011-03-03 11:54:16 -08:00
Tj Holowaychuk
2dae6d8285 Fixed mounting of non-express servers 2011-03-03 11:33:53 -08:00
Tj Holowaychuk
65c8a956f1 do not try ../index when rendering a layout 2011-03-03 11:23:16 -08:00
Tj Holowaychuk
2b907e9a8c fixing tests 2011-03-03 11:21:57 -08:00
Tj Holowaychuk
25e520c243 misc 2011-03-03 11:11:08 -08:00
Tj Holowaychuk
2124c8465a removed scope tests 2011-03-03 11:05:16 -08:00
Tj Holowaychuk
a49e1f4f3d Changed default view scope to a plain object
easier to debug, and kinda useless to use "this" anyway
2011-03-03 10:59:00 -08:00
Tj Holowaychuk
32be4a7812 Added View#upIndexPath 2011-03-03 10:54:54 -08:00
Tj Holowaychuk
92967d3457 Added failing test for partial("foo") loading the index 2011-03-03 10:28:51 -08:00
Tj Holowaychuk
d70fee7432 Added partial() index test 2011-03-03 10:24:50 -08:00
Tj Holowaychuk
97b8e75932 Added index view test 2011-03-03 10:18:19 -08:00
Tj Holowaychuk
8a62f8cef0 view lookup docs 2011-03-03 10:10:18 -08:00
Tj Holowaychuk
10f4f523fa populate changelog for 2.0.0beta 2011-03-03 10:00:56 -08:00
Tj Holowaychuk
1e392d2628 populate changelog from 1.x 2011-03-03 09:36:38 -08:00
Tj Holowaychuk
eb6ff62113 Fixed req.param() bug returning Array.prototype methods. Closes #552 2011-03-03 09:20:28 -08:00
Tj Holowaychuk
64da2621da Merge branch 'docs' 2011-03-02 18:37:43 -08:00
Tj Holowaychuk
61aec6e961 Added markdown template engine example 2011-03-02 18:37:36 -08:00
Tj Holowaychuk
42f3ad436d docs 2011-03-02 18:37:29 -08:00
Tj Holowaychuk
2f7b78c03a ejs example using app.register() 2011-03-02 18:27:12 -08:00
Tj Holowaychuk
402d37d613 docs 2011-03-02 18:25:21 -08:00
Tj Holowaychuk
96327c979c docs 2011-03-02 18:10:51 -08:00
Tj Holowaychuk
9d1b3f59d5 docs 2011-03-02 17:20:39 -08:00
Tj Holowaychuk
14bd50efe4 docs 2011-03-02 16:59:48 -08:00
Tj Holowaychuk
631c1f95e7 node ">= 0.4.1 < 0.5.0" 2011-03-02 16:36:05 -08:00
Tj Holowaychuk
50006f7e43 docs 2011-03-02 16:22:53 -08:00
Tj Holowaychuk
4c9503158b connect >= 1.0.1 2011-03-02 16:16:03 -08:00
Tj Holowaychuk
6c8e461db5 beta 2011-03-02 16:15:37 -08:00
Tj Holowaychuk
aaa8415169 Removed partial() / render() status and header options 2011-03-02 16:11:02 -08:00
Tj Holowaychuk
51e964498c docs 2011-03-02 16:08:39 -08:00
Tj Holowaychuk
0cddc70ff5 node 0.4.x only 2011-03-02 15:57:33 -08:00
Tj Holowaychuk
99dcf7508f Added res.redirect() mount test 2011-03-02 15:52:41 -08:00
Tj Holowaychuk
7822d1f148 docs 2011-03-02 15:45:24 -08:00
Tj Holowaychuk
a572a7126c Merge branch 'mounting' 2011-03-02 15:42:34 -08:00
Tj Holowaychuk
a1609faba0 stylesheet respecting base 2011-03-02 15:42:29 -08:00
Tj Holowaychuk
9bf823d893 Added mount support for res.redirect(), now respects the mount-point 2011-03-02 15:37:12 -08:00
Tj Holowaychuk
ca184e7725 Updated connect submodule 2011-03-02 15:26:21 -08:00
Tj Holowaychuk
5054507487 added "base" local to blog example for mounting 2011-03-02 15:17:19 -08:00
Tj Holowaychuk
ab93be0178 refactored blog example 2011-03-02 15:06:23 -08:00
Tj Holowaychuk
8b0993bb10 misc 2011-03-02 15:02:57 -08:00
Tj Holowaychuk
0a034bb3ea started mounting example 2011-03-02 15:01:46 -08:00
Tj Holowaychuk
4ce815a3ed Removed annotated docs 2011-03-02 14:49:39 -08:00
Tj Holowaychuk
4da860eae1 removed api.html 2011-03-02 14:49:26 -08:00
Tj Holowaychuk
27e4bdb814 more res.partial() examples 2011-03-02 14:39:24 -08:00
Tj Holowaychuk
dd9406cd52 Added res.partial(), using the same interface as partial() within a view. Closes #539 2011-03-02 14:27:07 -08:00
Tj Holowaychuk
509312773d partials example utilizing index 2011-03-02 13:56:47 -08:00
Tj Holowaychuk
42d2758c36 Added union() util, taking place of merge(clone()) combo 2011-03-02 13:41:36 -08:00
Tj Holowaychuk
ef1c858ffc more test refactoring 2011-03-02 13:31:11 -08:00
Tj Holowaychuk
7fd47c0ac6 more test refactoring 2011-03-02 13:21:54 -08:00
Tj Holowaychuk
a63b232ef1 more test refactoring 2011-03-02 13:20:27 -08:00
Tj Holowaychuk
acb502e5e3 refactoring tsts 2011-03-02 13:18:39 -08:00
Tj Holowaychuk
3661922bb0 refactored res.send() 2011-03-02 12:39:39 -08:00
Tj Holowaychuk
0704f149be misc 2011-03-02 12:28:24 -08:00
Tj Holowaychuk
334604de5d utilizing app.set() 2011-03-02 12:03:05 -08:00
Tj Holowaychuk
530328ac15 misc refactoring 2011-03-02 11:43:40 -08:00
Tj Holowaychuk
9914a1eb3f copyright 2011-03-02 11:37:19 -08:00
Tj Holowaychuk
5db5710d3f Merge branch 'bugs/local-precedence' 2011-03-02 11:31:21 -08:00
Tj Holowaychuk
9e9f55a8e3 fixed local precedence 2011-03-02 11:31:14 -08:00
Tj Holowaychuk
0800141a9d semi-colons 2011-03-02 11:13:39 -08:00
Tj Holowaychuk
dc6d469f0c added more local tests 2011-03-02 11:11:18 -08:00
Tj Holowaychuk
89299d77e4 bodyParser not bodyDecoder 2011-03-02 10:52:37 -08:00
Tj Holowaychuk
27d8bf6311 refactored express(1) stdin usage 2011-03-02 10:50:13 -08:00
Tj Holowaychuk
8c229a8560 fixed express(1) confirmation for 0.4.x 2011-03-02 10:47:14 -08:00
Tj Holowaychuk
29eed65a67 removed constants from express(1) 2011-03-02 10:43:55 -08:00
Tj Holowaychuk
f0e0073a09 more partial examples 2011-03-02 10:39:32 -08:00
Tj Holowaychuk
b70bde58be fixing more examples 2011-03-02 10:30:33 -08:00
Tj Holowaychuk
635fac776d renamed example to params 2011-03-02 10:26:43 -08:00
Tj Holowaychuk
7753d4e91d refactored partials example 2011-03-02 10:24:57 -08:00
Tj Holowaychuk
66a6214216 fixing more examples 2011-03-02 10:15:10 -08:00
Tj Holowaychuk
6cae1f09f1 docs 2011-03-02 10:09:07 -08:00
Tj Holowaychuk
c4432ee827 download example 2011-03-02 10:06:14 -08:00
Tj Holowaychuk
80a5bf2063 fixing examples 2011-03-02 10:02:42 -08:00
Tj Holowaychuk
5b3d5fc431 removed cache example 2011-03-02 09:57:11 -08:00
Tj Holowaychuk
cd38fb4177 refactored auth example 2011-03-02 09:56:09 -08:00
Tj Holowaychuk
9b1cc75b36 res.download() and res.sendfile() using connect now 2011-03-02 09:41:21 -08:00
Tj Holowaychuk
db8b2883e2 Updated connect submodule 2011-03-01 15:53:56 -08:00
Tj Holowaychuk
59a74ecce4 refactoring to use connects static server 2011-03-01 15:42:42 -08:00
Tj Holowaychuk
9099c61df9 Merge branch 'progressive-headers' 2011-03-01 14:41:01 -08:00
Tj Holowaychuk
50521281ce utilizing nodes progressive response header api 2011-03-01 14:40:46 -08:00
Tj Holowaychuk
0cc6abf741 refactored req.is() 2011-03-01 14:34:36 -08:00
Tj Holowaychuk
fe266ae4fe misc refactoring 2011-03-01 14:32:59 -08:00
Tj Holowaychuk
7c15cdeb69 misc refactoring 2011-03-01 14:30:48 -08:00
Tj Holowaychuk
848086947c refactor errorHandler registration 2011-03-01 14:20:25 -08:00
Tj Holowaychuk
5ec4ea754c misc refactoring 2011-03-01 14:18:14 -08:00
Tj Holowaychuk
41467d54df docs 2011-03-01 14:16:16 -08:00
Tj Holowaychuk
8261437764 Merge branch 'features/https' 2011-03-01 14:08:40 -08:00
Tj Holowaychuk
54eac368d0 Finished https support 2011-03-01 14:06:53 -08:00
Tj Holowaychuk
72511ea1e9 Started https.js 2011-03-01 13:53:22 -08:00
Tj Holowaychuk
da7921f2c6 Moved server.js into http.js 2011-03-01 13:34:50 -08:00
Tj Holowaychuk
cd519e97e7 tests running again 2011-03-01 11:00:50 -08:00
Tj Holowaychuk
2a7a5aeefe Renaming usage of old connect middleware 2011-03-01 10:59:09 -08:00
Tj Holowaychuk
bdbacb41da prepping for connect 1.0 2011-03-01 10:54:04 -08:00
Tj Holowaychuk
2dd736a201 Updated expresso submodule 2011-03-01 10:45:07 -08:00
Tj Holowaychuk
ec3c797105 Updated connect submodule 2011-03-01 10:39:50 -08:00
Tj Holowaychuk
770f05c060 styling 2011-02-23 15:41:59 -08:00
Tj Holowaychuk
6993a27d8e refactored res.redirect() with res.req.header() for referrer 2011-02-23 15:39:06 -08:00
Tj Holowaychuk
68fd658536 more tests 2011-02-23 15:37:27 -08:00
Tj Holowaychuk
9fc349965d Changed; charsets are no longer implied 2011-02-23 15:24:56 -08:00
Tj Holowaychuk
0a667ff741 Added mime support submod 2011-02-23 15:23:48 -08:00
Tj Holowaychuk
d37ad85f72 replaced connect.utils.mime() with mime module 2011-02-23 15:23:08 -08:00
Tj Holowaychuk
2b63568611 node >= 0.4.0 2011-02-21 13:46:40 -08:00
Tj Holowaychuk
fcf9f93825 2.0.0-pre 2011-02-21 13:46:26 -08:00
Tj Holowaychuk
07efc0b73b clean up generated app 2011-02-21 13:43:00 -08:00
Tj Holowaychuk
6813b48c7e replaced link to express-contrib with new solo repos 2011-02-21 11:37:19 -08:00
Tj Holowaychuk
d58444c6d2 Updated ejs submodule 2011-02-17 23:41:28 -08:00
Tj Holowaychuk
dd8a0bd30f removed .config (unused prop) 2011-02-15 14:09:01 -08:00
Tj Holowaychuk
b65b0636aa Added req.header() Referrer / Referer special-case 2011-02-14 19:38:01 -08:00
Tj Holowaychuk
9ec6321261 qs >= 0.0.6 2011-02-14 15:26:00 -08:00
Tj Holowaychuk
07eb66c205 Fixed res.download() callback, passing stream. Closes #528
should be able to figure something out with this.
at very least use redis or something with INCR/DECR to
keep a count on active downloads
2011-02-10 08:57:53 -08:00
Tj Holowaychuk
0e790e6fb5 using Stream#pipe() instead of sys.pump() 2011-02-10 08:50:11 -08:00
Tj Holowaychuk
08186924a4 qs >= 0.0.3 2011-02-08 16:57:09 -08:00
Tj Holowaychuk
e9faf5cf94 Updated qs submodule 2011-02-08 16:56:33 -08:00
Tj Holowaychuk
8c0efe09e5 comment typo 2011-02-08 12:34:00 -08:00
Tj Holowaychuk
32d2c96d22 docs 2011-02-08 11:07:06 -08:00
Tj Holowaychuk
e958988989 styling for stylus example 2011-02-08 11:01:53 -08:00
Tj Holowaychuk
131f10bd80 more work on stylus example 2011-02-08 10:55:22 -08:00
Tj Holowaychuk
a61615a196 Setting up Stylus example 2011-02-08 10:42:39 -08:00
Tj Holowaychuk
4fdb6910a5 Allow req.query to be pre-defined (via middleware or other parent app) 2011-02-07 16:30:38 -08:00
Tj Holowaychuk
67c4c90351 Updated qs submodule 2011-02-07 15:35:46 -08:00
Tj Holowaychuk
16f7288b19 Updated connect submodule 2011-02-07 15:35:43 -08:00
Tj Holowaychuk
36a7e87ae4 querystring -> qs 2011-02-07 14:36:28 -08:00
Tj Holowaychuk
16badda118 Added test for periods in dirname when using "view engine" 2011-02-07 13:59:14 -08:00
Tj Holowaychuk
99820e7edc Refactored req/res proto assignments
since the names may change in the near future (is suspect at least)
due to inconsistancies
2011-02-03 21:05:04 -08:00
Tj Holowaychuk
6a03a92f5f Refactored res.header() 2011-02-03 21:03:27 -08:00
Tj Holowaychuk
80c3b98a84 Added multiple Set-Cookie header tests 2011-02-03 21:01:28 -08:00
Tj Holowaychuk
afd2b4b387 Removed alternate installation methods (use git, tarball, or npm) 2011-02-03 21:00:33 -08:00
Tj Holowaychuk
df49769f3d Fixed two tests 2011-02-03 20:49:53 -08:00
Tj Holowaychuk
05c2946322 Added qs submod 2011-02-03 20:47:54 -08:00
Tj Holowaychuk
2ed392edbf Updated connect submodule 2011-02-03 20:44:19 -08:00
Tj Holowaychuk
3d597a554d moved files from lib/express/* to lib/ 2011-02-03 20:20:42 -08:00
Tj Holowaychuk
42af4e40ae Updated connect submodule 2011-02-03 20:19:32 -08:00
Tj Holowaychuk
242efc7219 Updated jade submodule 2011-02-02 09:42:09 -08:00
Tj Holowaychuk
a6bacb857d Added redis session example 2011-02-01 10:02:15 -08:00
Tj Holowaychuk
eab54724a1 connect >= 0.5.7 2011-02-01 08:32:50 -08:00
Tj Holowaychuk
49885cfeff Updated connect submodule 2011-02-01 08:31:14 -08:00
Tj Holowaychuk
4330f49011 Added stylus support to express(1) generated app 2011-01-31 14:40:19 -08:00
Tj Holowaychuk
7687299275 Added secret to session middleware used in examples and generated app 2011-01-29 12:36:48 -08:00
Tj Holowaychuk
79ba787b03 Re-added jade submodule to hopefully fix #514 2011-01-28 12:04:12 -08:00
Tj Holowaychuk
5a184a205f Removed jade submodule 2011-01-28 12:03:39 -08:00
Tj Holowaychuk
4b5a6b597a Added formidable submod for multipart example 2011-01-25 10:04:06 -08:00
Tj Holowaychuk
9e9c3eeb79 Added vhost example 2011-01-25 09:38:02 -08:00
Tj Holowaychuk
cd996f9dbf Updated connect submodule 2011-01-25 09:12:24 -08:00
Tj Holowaychuk
ab4c91158a Added another partial locals test 2011-01-25 07:56:20 -08:00
Tj Holowaychuk
1130a23e5b Added test for partial locals on subsequent calls 2011-01-25 07:39:14 -08:00
Tj Holowaychuk
9ac6943220 Updated jade submodule 2011-01-24 11:45:58 -08:00
Tj Holowaychuk
0f55284b77 Updated changelog 2011-01-20 08:39:29 -08:00
Tj Holowaychuk
c75046de3f docs 2011-01-19 11:01:59 -08:00
Tj Holowaychuk
e7df82f110 Added 416 support to res.sendfile() 2011-01-19 09:28:48 -08:00
Tj Holowaychuk
ee4c7d3007 Removed "stream threshold" setting 2011-01-19 09:17:27 -08:00
Tj Holowaychuk
2895303421 Added Content-Length to res.sendfile(). Closes #507 2011-01-19 09:07:05 -08:00
Tj Holowaychuk
3f16f05525 Added HEAD support to res.sendfile() 2011-01-19 08:47:42 -08:00
Tj Holowaychuk
fb33671923 Ignore testing.js 2011-01-19 08:43:51 -08:00
Tj Holowaychuk
482fb5b6e2 Strip unsafe chars from jsonp callbacks 2011-01-13 14:13:16 -08:00
Tj Holowaychuk
b1004b61f9 fixed session example/tests due to connect changes 2011-01-13 12:11:18 -08:00
Tj Holowaychuk
27af9b2605 Updated connect submodule 2011-01-13 12:09:49 -08:00
Tj Holowaychuk
e28ac866f8 fixed width for github example css 2011-01-12 10:17:31 -08:00
Tj Holowaychuk
5e0a80f227 Updated connect submodule 2011-01-09 23:42:42 -08:00
Tj Holowaychuk
ec0982ca1f Added flash messages to blog example 2011-01-05 19:09:56 -08:00
Tj Holowaychuk
e7c442d21c Updated connect submodule 2011-01-03 13:34:36 -08:00
Tj Holowaychuk
a9db47fdd3 Updated connect submodule 2011-01-03 13:30:54 -08:00
Tj Holowaychuk
b856a72886 more examples 2010-12-31 16:13:19 -08:00
Tj Holowaychuk
03da0d31f9 Styling 2010-12-31 15:46:50 -08:00
Tj Holowaychuk
1c40e4374b More example 2010-12-31 15:37:27 -08:00
Tj Holowaychuk
d7df1426f2 Updated connect submodule 2010-12-31 15:07:00 -08:00
Tj Holowaychuk
5035e86f59 more example 2010-12-31 15:03:00 -08:00
Tj Holowaychuk
0af91265ab Added default param support to req.param(name, default) 2010-12-31 09:21:51 -08:00
Tj Holowaychuk
8e63d04e66 Re-built docs 2010-12-31 09:04:44 -08:00
Tj Holowaychuk
5ac0c6deb0 Added res.local(name[, val]) docs 2010-12-31 09:04:30 -08:00
Tj Holowaychuk
6b0d82fb0c Added res.local() for progressive view locals
for middleware etc.
res.local("foo", "bar") => "bar"
res.local("foo") => "bar"
2010-12-31 08:59:35 -08:00
Tj Holowaychuk
2bfdfe366c Fixed for middleware stacked via createServer() 2010-12-29 11:21:24 -08:00
Tj Holowaychuk
898fb0f320 Added failing middleware precedence tests 2010-12-29 11:15:40 -08:00
Tj Holowaychuk
f53686a2f3 Fixed index view resolution bug introduced by 1c2e9a476c 2010-12-29 08:57:56 -08:00
mgutz
eae1670f54 madestr local 2010-12-29 08:45:22 -08:00
Tj Holowaychuk
544d68833c Fixed express(1) support for < 0.3.x 2010-12-28 12:00:04 -08:00
Tj Holowaychuk
c24a6b2359 Fixed express(1) mode 2010-12-28 11:56:44 -08:00
Tj Holowaychuk
b720b57d1d Updated jade submodule 2010-12-28 04:59:28 -08:00
Tj Holowaychuk
365b7fe90a Merge branch 'OPTIONS' 2010-12-28 04:05:44 -08:00
Tj Holowaychuk
c7ab833e66 Added OPTIONS test 2010-12-28 04:05:39 -08:00
Tj Holowaychuk
9536f288e9 Updated connect submodule 2010-12-28 04:03:43 -08:00
Tj Holowaychuk
e64d4039d0 Generating methods based on connect.router.methods 2010-12-28 03:12:11 -08:00
Tj Holowaychuk
5f077e56f0 Updated connect submodule 2010-12-28 03:09:07 -08:00
Tj Holowaychuk
a9253a24e0 Added docs for app.{disabled,enabled}() 2010-12-23 09:29:43 -08:00
Tj Holowaychuk
749136b526 Added app.disabled() and app.enabled() 2010-12-23 09:28:15 -08:00
Tj Holowaychuk
36a8b7b7f3 Docs 2010-12-22 15:49:37 -08:00
Tj Holowaychuk
a29908c865 Few jade changes to partials example 2010-12-22 15:48:41 -08:00
Hunter Loftis
57d87c27cd Created examples/partials to demonstrate view name, file, object resolution 2010-12-22 15:44:26 -08:00
Hunter Loftis
1c2e9a476c Fixed _ prefix object resolution on partials (resolveObjectName), added _ prefix fallback to view file resolution (prefixPath) 2010-12-22 15:44:26 -08:00
shuwatto
5d87133df0 Constants don't exist in process. The same problem is reported following link https://github.com/senchalabs/connect/issues/closed#issue/119 2010-12-21 09:04:23 -08:00
Tj Holowaychuk
fd2f67b73f Route precondition docs 2010-12-20 05:53:50 -08:00
Tj Holowaychuk
d3abcaf67b Regenerated docs 2010-12-20 05:41:05 -08:00
Tj Holowaychuk
14dce5ac2b Docs 2010-12-20 05:40:51 -08:00
Tj Holowaychuk
abd002071a Test for named capture groups 2010-12-20 05:29:01 -08:00
Tj Holowaychuk
77add42eeb Updated connect submodule 2010-12-20 05:27:21 -08:00
Tj Holowaychuk
bba049b4bf Docs 2010-12-20 05:27:07 -08:00
Tj Holowaychuk
4e41c3520c Contrib guide link 2010-12-20 05:18:32 -08:00
Tj Holowaychuk
4144af3351 Added screencasts page 2010-12-20 05:17:25 -08:00
Tj Holowaychuk
30f749a2a2 Docs 2010-12-20 05:05:47 -08:00
Tj Holowaychuk
6e9f282af7 added .npmignore 2010-12-18 13:42:43 -08:00
Tj Holowaychuk
4491be01dd Using named capture group for downloads example 2010-12-16 09:21:31 -08:00
Tj Holowaychuk
8c163fd980 Updated connect-form submodule 2010-12-15 09:45:45 -08:00
Tj Holowaychuk
9f6a158fc2 Fixed SyntaxError in express(1) app tests 2010-12-14 08:20:00 -08:00
Tj Holowaychuk
19965fa3c8 Aliased app.helpers() as app.locals(). Closes #481 2010-12-12 16:10:59 -08:00
Tj Holowaychuk
6bb42ffafc should 2010-12-12 16:10:01 -08:00
Tj Holowaychuk
4a1edc0720 indentation fix 2010-12-12 16:08:27 -08:00
Tj Holowaychuk
a5a016bf33 Updated connect submodule 2010-12-10 12:42:55 -08:00
Tj Holowaychuk
4be4f597a3 Updated connect submodule 2010-12-10 12:42:36 -08:00
Tj Holowaychuk
dfbbd4f784 Merge branch 'partials' 2010-12-10 10:18:44 -08:00
Tj Holowaychuk
2662dae560 Removed "_" prefix from partials 2010-12-10 10:18:38 -08:00
Tj Holowaychuk
6f6f9f08f8 Added app.register() support for omitting leading "." 2010-12-10 08:15:27 -08:00
Tj Holowaychuk
a76fba57c4 Added extname with no leading "." support to res.contentType)
For example now you may:

    res.contentType("png");

or

    res.contentType(".png");

both are fine now
2010-12-10 08:14:15 -08:00
Tj Holowaychuk
680766f29b Updated jade submodule 2010-12-08 10:29:07 -08:00
Tj Holowaychuk
adcfd4ca4d Added more screencast links 2010-12-06 19:25:17 -08:00
Tj Holowaychuk
e276a49a91 Updated connect submodule 2010-12-06 18:13:07 -08:00
Tj Holowaychuk
5995f763b1 connect >= 0.5.0 2010-12-06 18:11:34 -08:00
Tj Holowaychuk
a123639b5c Fixed placeholder example 2010-12-06 17:45:01 -08:00
Tj Holowaychuk
8a118d53c8 Fixed some namespaced connect requires 2010-12-06 17:41:56 -08:00
Tj Holowaychuk
d572391532 Updated connect submodule 2010-12-06 17:39:27 -08:00
Tj Holowaychuk
58ae7a0402 Added param placeholder precondition example 2010-12-06 17:38:51 -08:00
Tj Holowaychuk
f843093a8c Added Array support to Server#param() 2010-12-06 17:28:17 -08:00
Tj Holowaychuk
3e06586f81 Added Server#param() 2010-12-06 17:18:44 -08:00
Tj Holowaychuk
60f148326a Updated expresso submodule 2010-12-06 17:05:30 -08:00
Tj Holowaychuk
02e1413ca5 Updated connect submodule 2010-12-06 17:04:50 -08:00
Tj Holowaychuk
7b4b85ee54 Updated connect submodule 2010-12-06 14:53:14 -08:00
Tj Holowaychuk
6c0a416f16 Added view partials screencast link 2010-12-05 11:06:26 -08:00
Tj Holowaychuk
23cc88bf92 Added introduction screencast link 2010-12-05 10:44:13 -08:00
Tj Holowaychuk
5528f0ddf2 Misc refactoring 2010-12-05 10:13:06 -08:00
Tj Holowaychuk
8d3296fb1b Fixed mvc example due to view lookup changes 2010-12-05 10:02:38 -08:00
Tj Holowaychuk
136f9209a3 route-separation example using new view resolution 2010-12-05 10:00:07 -08:00
Tj Holowaychuk
a290134fd2 Merge branch 'view-index' 2010-12-05 09:56:20 -08:00
Tj Holowaychuk
a54e59666a Added view index resolution support 2010-12-05 09:55:11 -08:00
Tj Holowaychuk
42ea6af1eb Added view index template support 2010-12-05 09:49:11 -08:00
Tj Holowaychuk
f9b741766b Started view index support 2010-12-05 09:46:59 -08:00
Tj Holowaychuk
09359329a0 ejs example using new partial lookup 2010-12-05 09:37:50 -08:00
Tj Holowaychuk
647bb41ddf Merge branch 'partial-lookup' 2010-12-05 09:33:26 -08:00
Tj Holowaychuk
f25c14d48d Fixed partial parent view ref 2010-12-05 09:33:20 -08:00
Tj Holowaychuk
81a3d559f5 Removed a require 2010-12-05 09:22:19 -08:00
Tj Holowaychuk
4e0ee7a5da Added more partial view path tests 2010-12-05 09:20:58 -08:00
Tj Holowaychuk
1c80a258d2 Passing dir 2010-12-05 09:17:20 -08:00
Tj Holowaychuk
129ed6a07b Added Partial#resolvePartialPath() 2010-12-05 09:16:12 -08:00
Tj Holowaychuk
df09a0c73b Partial tests using real fixtures 2010-12-05 09:13:41 -08:00
Tj Holowaychuk
ff5c958354 express(1) no longer passing assert in tests 2010-12-02 15:51:52 -08:00
Tj Holowaychuk
4f90c89db6 refactored req.accepts() 2010-12-02 10:07:28 -08:00
Tj Holowaychuk
524b515fdb docs 2010-12-02 10:06:40 -08:00
Tj Holowaychuk
163256b001 Added req.accepts() support for extensions 2010-12-02 10:05:29 -08:00
Tj Holowaychuk
05bbc65dcc Added failing req.accepts() test 2010-12-02 10:03:59 -08:00
Tj Holowaychuk
6624f6b7f9 Added more req.accepts() tests 2010-12-02 10:03:25 -08:00
Tj Holowaychuk
f32279dec5 more partial docs 2010-11-29 17:20:13 -08:00
Tj Holowaychuk
a90fd85907 Added strategic cache example (with redis) 2010-11-29 17:01:28 -08:00
Tj Holowaychuk
9815b27e94 Updated connect submodule 2010-11-29 09:57:53 -08:00
Tj Holowaychuk
ebbe481fe7 Added default link color for express(1) generated apps 2010-11-28 13:19:23 -08:00
Tj Holowaychuk
9e337faa33 Removed ./views/partials generation in express(1) 2010-11-28 10:45:48 -08:00
Tj Holowaychuk
37826e0261 Fixed locals in express(1) generated app 2010-11-28 10:29:10 -08:00
Tj Holowaychuk
20e4342796 Fixed uncached templates in development 2010-11-25 15:46:57 -08:00
Tj Holowaychuk
51be16950d Added isLayout back 2010-11-25 14:54:42 -08:00
Tj Holowaychuk
be866a78ff fixed session example 2010-11-25 14:14:31 -08:00
Tj Holowaychuk
f9d2432c69 fixed route-separation example 2010-11-25 14:14:13 -08:00
Tj Holowaychuk
6543a3d75a added format support to resource example 2010-11-25 14:11:52 -08:00
Tj Holowaychuk
a77936981e Fixed resource example 2010-11-25 14:08:27 -08:00
Tj Holowaychuk
6f2120bb59 Fixed mvc example 2010-11-25 14:05:28 -08:00
Tj Holowaychuk
98e18239fd refactored multipart example 2010-11-25 13:59:10 -08:00
Tj Holowaychuk
3d159015be misc 2010-11-25 13:56:12 -08:00
Tj Holowaychuk
f5af66a1ab fixed github example 2010-11-25 13:53:51 -08:00
Tj Holowaychuk
540192ff96 refactored format example 2010-11-25 13:50:32 -08:00
Tj Holowaychuk
c1cfd4a8c6 refactored form example 2010-11-25 13:47:49 -08:00
Tj Holowaychuk
322300c329 fixed flash example 2010-11-25 13:46:40 -08:00
Tj Holowaychuk
1ac18f7903 refactored error-pages example 2010-11-25 13:44:52 -08:00
Tj Holowaychuk
4f4987e9ea misc 2010-11-25 13:41:50 -08:00
Tj Holowaychuk
65bf562ff4 refactored downloads example 2010-11-25 13:41:15 -08:00
Tj Holowaychuk
f47032e7e9 refactored cookies example 2010-11-25 13:40:50 -08:00
Tj Holowaychuk
379f3ec8dd removed blog example 2010-11-25 13:40:02 -08:00
Tj Holowaychuk
8d7e35b723 refactored auth example 2010-11-25 13:39:07 -08:00
Tj Holowaychuk
1349eea0d0 misc refactoring 2010-11-24 14:44:00 -08:00
Tj Holowaychuk
bed5157f32 Make note in docs that res.send() is a convenience method, and should only be called once (ATM) 2010-11-24 10:07:25 -08:00
Tj Holowaychuk
12c7f51a1e Updated jade submodule 2010-11-24 08:14:36 -08:00
Tj Holowaychuk
7e32c8de4d unroll partial rendering for performance 2010-11-23 10:27:26 -08:00
Tj Holowaychuk
3a42350c21 cache resolveObjectName() 2010-11-23 10:14:30 -08:00
Tj Holowaychuk
1a54597202 todo 2010-11-23 10:07:24 -08:00
Tj Holowaychuk
39f4eb9940 Added "cache views" setting, defaulting to enabled in "production" env 2010-11-23 09:49:43 -08:00
Tj Holowaychuk
4b996651af fixed template caching 2010-11-23 09:45:50 -08:00
Tj Holowaychuk
884d40f321 caching compiled view functions 2010-11-23 09:42:19 -08:00
Tj Holowaychuk
3d2b41da08 todo 2010-11-23 09:07:36 -08:00
Tj Holowaychuk
1bf2dbb7df Added memoized path utils 2010-11-23 08:58:36 -08:00
Tj Holowaychuk
e0dfb77dd1 misc refactoring 2010-11-22 21:08:24 -08:00
Tj Holowaychuk
578fddc1b7 cache view contents again 2010-11-22 18:28:19 -08:00
Tj Holowaychuk
089355d706 Merge branch 'views' 2010-11-22 17:55:17 -08:00
Tj Holowaychuk
6b2c3caf03 fixed register 2010-11-22 17:55:14 -08:00
Tj Holowaychuk
065c37cb28 moved View and Partial into their own files 2010-11-22 17:52:45 -08:00
Tj Holowaychuk
3a40025fd3 Merge branch 'views' 2010-11-22 17:36:59 -08:00
Tj Holowaychuk
8dc341d868 removed old code 2010-11-22 17:36:50 -08:00
Tj Holowaychuk
0ed121ddbd Merge branch 'views' 2010-11-22 17:24:50 -08:00
Tj Holowaychuk
969f4229dc added Partial.resolveObjectName() 2010-11-22 17:24:44 -08:00
Tj Holowaychuk
27a940184e removed old cacheViewSync() 2010-11-22 17:02:50 -08:00
Tj Holowaychuk
77fa09a506 relative view option 2010-11-22 16:58:39 -08:00
Tj Holowaychuk
8836104ab2 absolute layouts 2010-11-22 16:56:55 -08:00
Tj Holowaychuk
396837517d fixed ejs example for new locals 2010-11-22 16:43:47 -08:00
Tj Holowaychuk
38b3f1bde2 fixed "view options" support 2010-11-22 16:41:56 -08:00
Tj Holowaychuk
4780168ba8 implementing new locals 2010-11-22 16:39:55 -08:00
Tj Holowaychuk
d1a790d103 fixed jade example for new locals 2010-11-22 16:32:51 -08:00
Tj Holowaychuk
3ad6ab8c6a removed locals: from view tests 2010-11-22 16:24:05 -08:00
Tj Holowaychuk
1e189da85e refactored dynamicHelper support 2010-11-22 16:19:53 -08:00
Tj Holowaychuk
a094c50873 indentation 2010-11-22 16:16:29 -08:00
Tj Holowaychuk
ad324410c6 Utilizing the new View / Partial constructors 2010-11-22 16:12:30 -08:00
Tj Holowaychuk
9f4b7368a0 Started View implementation 2010-11-22 11:33:20 -08:00
Tj Holowaychuk
c8ddedb8d0 jade example fixes 2010-11-19 17:12:34 -08:00
Tj Holowaychuk
7deab2826b Updated jade submodule 2010-11-19 17:08:35 -08:00
Tj Holowaychuk
643879f779 using should / refactored tests 2010-11-19 16:00:21 -08:00
Tj Holowaychuk
ce2a18f483 master is 2.0.0-pre 2010-11-18 07:48:31 -08:00
Tj Holowaychuk
487d067f75 Fixed route-separation example require 2010-11-17 11:26:50 -08:00
Tj Holowaychuk
c4d5e1b4f3 Docs 2010-11-16 18:04:48 -08:00
Tj Holowaychuk
0e0cc30039 Docs 2010-11-16 17:58:30 -08:00
Tj Holowaychuk
a766cc791b Release 1.0.0 2010-11-16 17:54:58 -08:00
Tj Holowaychuk
d017c3e248 Rebuilt docs 2010-11-16 17:43:23 -08:00
Tj Holowaychuk
cc27ee04a8 PREFIX 2010-11-16 17:36:31 -08:00
Tj Holowaychuk
87459bf24b undoc manual install method 2010-11-16 17:36:05 -08:00
Tj Holowaychuk
5091c9e10f Added posts to the reoute separation example 2010-11-13 10:55:15 -08:00
Tj Holowaychuk
14a22d9033 Updating users 2010-11-13 10:37:23 -08:00
Tj Holowaychuk
7ded5a2de5 Started route separation example 2010-11-13 10:33:41 -08:00
Tj Holowaychuk
6b436a0192 Fixed github example styling 2010-11-13 09:29:42 -08:00
Tj Holowaychuk
52343686f5 Docs 2010-11-12 09:00:03 -08:00
Tj Holowaychuk
eec9d05b19 connect >= 0.3.0 2010-11-12 08:46:29 -08:00
Tj Holowaychuk
89703fd430 Added catchall test 2010-11-12 08:45:47 -08:00
Tj Holowaychuk
dc246946a7 Added app.all() support 2010-11-12 08:44:10 -08:00
Tj Holowaychuk
944e1120cb Updated connect submodule 2010-11-12 08:39:39 -08:00
Tj Holowaychuk
cccda60df8 Added link to node-jqtpl template engine 2010-11-08 07:18:45 -08:00
Tj Holowaychuk
e338e748eb Removed Content-Length for chunked 2010-11-05 04:31:56 -07:00
Tj Holowaychuk
0526a24cf3 Renamed pages example to error-pages. Closes #459 2010-11-05 02:39:08 -07:00
Tj Holowaychuk
c4ba1b025a Updated jade submodule 2010-10-30 13:35:09 -07:00
Tj Holowaychuk
252f330658 Revert "only register error handlers once"
This reverts commit 45590415a6.
2010-10-29 19:59:18 -07:00
Tj Holowaychuk
45590415a6 only register error handlers once 2010-10-29 19:54:17 -07:00
Tj Holowaychuk
e562adc752 Settings docs 2010-10-26 14:15:29 -07:00
Tj Holowaychuk
1e2fd44a6b Removed a set() call 2010-10-26 14:14:47 -07:00
Tj Holowaychuk
1c903320be New partial() docs 2010-10-26 12:08:59 -07:00
Tj Holowaychuk
74eaf3a268 Added objectName() 2010-10-26 12:02:40 -07:00
Tj Holowaychuk
6fcd74c713 Added missing files 2010-10-26 11:59:31 -07:00
Tj Holowaychuk
33136c6553 Fixed partial local inheritance precedence. Closes #454 2010-10-26 11:50:44 -07:00
Tj Holowaychuk
cb225db203 Added failing partial local precedence test [reported by Nick Poulden] 2010-10-26 11:47:13 -07:00
Tj Holowaychuk
0dbd5006ea Caching view path derived partial object names 2010-10-26 11:34:11 -07:00
Tj Holowaychuk
08b3677ce8 Merge branch 'partial-object' 2010-10-26 11:31:46 -07:00
Tj Holowaychuk
b08549a25b Added partial direct object support
these are now equivalent:

before:

    partial(movie, { object: movieRecord })

after:

    partial(movie, movieRecord)
2010-10-26 11:31:40 -07:00
Tj Holowaychuk
221bc4cb5d Misc refactor of partial() 2010-10-26 11:22:56 -07:00
Tj Holowaychuk
b655b8e97b Added partial object test 2010-10-26 11:22:14 -07:00
Tj Holowaychuk
03e7b5dcc6 Fixed a test 2010-10-26 11:10:43 -07:00
Tj Holowaychuk
5f09e829df Updated connect submodule 2010-10-26 01:18:16 -07:00
Tj Holowaychuk
e6759919dc fine with --version 0.2.4 2010-10-25 08:22:58 -07:00
Tj Holowaychuk
6c65a3fc74 Removed old app section from docs 2010-10-22 21:11:41 -07:00
Tj Holowaychuk
e0ffd31123 Added development seed's cool project to applications.html 2010-10-22 16:20:15 -07:00
Tj Holowaychuk
4c1597113a Added another partial test 2010-10-21 19:52:33 -07:00
Tj Holowaychuk
4006506b64 Added another partial locals test 2010-10-21 19:42:40 -07:00
Tj Holowaychuk
14facdbcd2 Merge branch 'partial-locals' 2010-10-21 19:29:40 -07:00
Tj Holowaychuk
726ace49d8 Added partial locals test with collection 2010-10-21 19:29:29 -07:00
Tj Holowaychuk
f45d383367 Fixed a test 2010-10-21 19:24:44 -07:00
Tj Holowaychuk
3a32e2b53a Added failing partial locals test 2010-10-21 19:15:20 -07:00
Tj Holowaychuk
dc45e93cea jsonp text/javascript as per mailinglist discussion 2010-10-21 14:11:07 -07:00
Tj Holowaychuk
c0f9642719 Merge branch 'bin' 2010-10-20 10:07:48 -07:00
Tj Holowaychuk
da8d036997 Implemented --template support 2010-10-20 10:07:43 -07:00
Tj Holowaychuk
3c911cc785 connect >= 0.2.7 2010-10-20 09:54:03 -07:00
Tj Holowaychuk
4071f15f27 Updated connect submodule 2010-10-20 09:49:13 -07:00
Tj Holowaychuk
90de7923db Added -t, --template flag 2010-10-19 17:39:02 -07:00
Tj Holowaychuk
c28f1535a3 Started ejs template support for express(1) 2010-10-19 17:37:13 -07:00
Tj Holowaychuk
704e9c132e Rebuilt docs 2010-10-19 17:19:36 -07:00
Tj Holowaychuk
713d6f5f76 Installation suggestions when using express(1) 2010-10-19 17:19:22 -07:00
Tj Holowaychuk
1a6d245eae Added -s, --session[s] support to express(1)
This adds cookieDecoder() / session() middleware for you
2010-10-19 17:12:28 -07:00
Tj Holowaychuk
d909dd2a32 Merge branch 'bin' 2010-10-19 17:03:07 -07:00
Tj Holowaychuk
7bb466dd86 Added -c, -css ENGINE option to express(1)
For example $ express
will now just create style.css

where as $ express --css sass
will generate style.sass for you and setup the compiler middleware

etc
2010-10-19 17:02:13 -07:00
Tj Holowaychuk
e09bf5cc40 Updated jade submodule 2010-10-19 15:02:56 -07:00
Tj Holowaychuk
129e21e7c3 Regenerate api docs 2010-10-19 10:55:15 -07:00
Tj Holowaychuk
87dcd2909d Doc typo 2010-10-19 10:54:45 -07:00
Tj Holowaychuk
e47ec4f551 Doc typo 2010-10-19 10:53:17 -07:00
Tj Holowaychuk
d6cfcbe149 Misc doc changes 2010-10-19 09:41:47 -07:00
Tj Holowaychuk
7a713807e9 Merge branch 'is' 2010-10-19 09:34:34 -07:00
Tj Holowaychuk
6e49b5bc30 More req.is() docs for new feature 2010-10-19 09:34:29 -07:00
Tj Holowaychuk
adbc5b86f5 Added req.is() wildcard support 2010-10-19 09:30:56 -07:00
Tj Holowaychuk
071ea955af More is() docs 2010-10-19 09:22:11 -07:00
Tj Holowaychuk
806aefa966 Added req.is() docs 2010-10-19 09:20:16 -07:00
Tj Holowaychuk
5b7d23186d Merge branch 'is' 2010-10-19 09:15:08 -07:00
Tj Holowaychuk
0cb4677e80 Added app.is() to register req.is() assertions 2010-10-19 09:15:02 -07:00
Tj Holowaychuk
bd65ecf17b Implemented req.is() 2010-10-19 08:59:06 -07:00
Tj Holowaychuk
9da2adff4c Added tests for req.is() 2010-10-19 08:50:48 -07:00
Tj Holowaychuk
a2a1aad109 Updated jade submodule 2010-10-18 08:51:36 -07:00
Tj Holowaychuk
dcc530a389 More apps 2010-10-17 10:19:18 -07:00
Tj Holowaychuk
97037a87f3 Fixed nodeko link 2010-10-16 19:21:24 -07:00
Tj Holowaychuk
4e67efc0d6 Merge branch 'apps' 2010-10-16 19:18:38 -07:00
Tj Holowaychuk
7cbb73719e Finished app page (for now) 2010-10-16 19:18:31 -07:00
Tj Holowaychuk
d3f139c31e Started apps section 2010-10-16 19:00:33 -07:00
Tj Holowaychuk
8940b6e5a3 Added X-Powered-By, remove Connects "Server" header field
potentially a security issue... I told Tim not to add this :p,
so for now we just hide it in Express until I have a chance to remove
it from Connect, at least the versions.
2010-10-16 18:24:24 -07:00
Tj Holowaychuk
1c9831a9f4 Regenerated docs 2010-10-15 12:51:14 -07:00
Tj Holowaychuk
7da27435cc Doc typo 2010-10-15 12:51:03 -07:00
Tj Holowaychuk
bd18f86517 Updated jade submodule 2010-10-15 12:25:40 -07:00
Tj Holowaychuk
41f66b435b Generated app using "view engine" "jade" 2010-10-15 10:17:25 -07:00
Tj Holowaychuk
48481a7230 Docs 2010-10-15 10:12:42 -07:00
Tj Holowaychuk
dde6bc1f80 Faster dynamicHelper "merge" 2010-10-15 10:02:02 -07:00
Tj Holowaychuk
e39fd1de0e Merge branch 'partials-inherit-locals' 2010-10-15 10:00:08 -07:00
Tj Holowaychuk
2fc9a81e9e Added partial local inheritance [suggested by masylum]. Closes #102 2010-10-15 09:55:04 -07:00
Tj Holowaychuk
f65874d751 Added partial inheritance test 2010-10-15 09:40:11 -07:00
Tj Holowaychuk
3914895784 Added http status code string representation to res.redirect() body 2010-10-15 09:20:11 -07:00
Tj Holowaychuk
0bc7e24d0a res.redirect() supporting text/plain and text/html via Accept 2010-10-15 09:13:07 -07:00
Tj Holowaychuk
2a40ceced7 Regenerated docs 2010-10-15 08:25:37 -07:00
Tj Holowaychuk
d4868f2cc2 NODE_ENV=production docs, VERY IMPORTANT do this, or your app will be slow :p 2010-10-15 08:25:25 -07:00
Tj Holowaychuk
e87d63779d More partial() docs 2010-10-14 09:08:13 -07:00
Tj Holowaychuk
6672d65018 Deduce partial object names from the last segment
user/role.ejs will use "role" as the object name by default
user.ejs will use "user"
forum/thread/post.jade will use "post"

etc
2010-10-14 08:56:49 -07:00
Tj Holowaychuk
1f78c520f5 Added test for collection option with an object 2010-10-14 08:39:05 -07:00
Tj Holowaychuk
687e435a38 Added CoffeeKup as a suggested template engine (let me know of others please :) ) 2010-10-14 04:21:20 -07:00
Tj Holowaychuk
b3222dc107 fixed bin/express 2010-10-14 04:17:15 -07:00
Tj Holowaychuk
ebba6caa3d 2 spaces in bin/express 2010-10-14 04:15:44 -07:00
Tj Holowaychuk
88bbef9003 Merge branch 'indentation' 2010-10-14 04:07:37 -07:00
Tj Holowaychuk
712771a139 2 spaces in view.js 2010-10-14 04:07:29 -07:00
Tj Holowaychuk
9033b0ded7 2 spaces in utils.js 2010-10-14 04:02:23 -07:00
Tj Holowaychuk
877cfe9393 2 spaces in server.js 2010-10-14 04:01:35 -07:00
Tj Holowaychuk
347aa56acb 2 spaces in response.js 2010-10-14 03:58:44 -07:00
Tj Holowaychuk
0fc410139c 2 spaces in request.js 2010-10-14 03:54:26 -07:00
Tj Holowaychuk
51528235db Regenerated docs 2010-10-14 03:50:33 -07:00
Tj Holowaychuk
003599cbda Release 1.0.0rc4 2010-10-14 03:50:10 -07:00
Tj Holowaychuk
bacfad37a9 Updated connect submodule 2010-10-14 03:41:41 -07:00
Tj Holowaychuk
6ef6ba7b8a Fix up app.register() docs. Closes #450
thank ya
2010-10-14 03:03:18 -07:00
Dav Glass
93c0da0367 Added tests for enable/disable of settings 2010-10-12 12:58:59 -07:00
Dav Glass
268d19e8a3 Added config option app.enable('jsonp callback') support 2010-10-12 12:58:59 -07:00
Dav Glass
a383b302c2 Added callback query check on response.send to autowrap JSON objects for simple webservice implementations 2010-10-12 12:58:59 -07:00
Tj Holowaychuk
95ebbf2608 Updated jade submodule 2010-10-12 11:27:41 -07:00
Tj Holowaychuk
f880574c78 Example typo 2010-10-12 10:09:20 -07:00
Tj Holowaychuk
350c310906 Fixed test typo 2010-10-12 09:49:15 -07:00
Tj Holowaychuk
5026f7686e Updated connect submodule 2010-10-12 09:48:49 -07:00
Tj Holowaychuk
ab3337ddf5 Regenerated guide 2010-10-12 08:46:22 -07:00
Tj Holowaychuk
c9268f2e3d Doc typo 2010-10-12 08:46:05 -07:00
Tj Holowaychuk
fa01388f97 Updated connect-form submodule 2010-10-12 08:30:36 -07:00
Tj Holowaychuk
d8dc89ac7b Updated jade submodule 2010-10-12 08:29:59 -07:00
Tj Holowaychuk
a659fd1fa9 Added partial() support for array-like collections. Closes #434 2010-10-11 08:37:42 -07:00
Tj Holowaychuk
27fa3ba34c Default env to "development" again [thanks aheckmann] 2010-10-11 08:17:52 -07:00
Tj Holowaychuk
663f42948e Added support for swappable querystring parsers 2010-10-08 11:38:59 -07:00
Tj Holowaychuk
baca8f0cdb Added guillermo to package.json contrib 2010-10-07 06:50:29 -07:00
Tj Holowaychuk
c5c3a82b23 Removed another sys require 2010-10-07 06:45:48 -07:00
Tj Holowaychuk
c0617864e1 Removed sys require 2010-10-07 06:45:14 -07:00
Tj Holowaychuk
d9ef9ab497 Merge branch 'perf/cache-dynamicHelpers' 2010-10-07 06:34:49 -07:00
Tj Holowaychuk
65d9f783e1 Added test for dynamic helper cache 2010-10-07 06:32:35 -07:00
Tj Holowaychuk
f70232d1b0 Implemented dynamic helper cache. Closes #439 2010-10-07 06:29:58 -07:00
Tj Holowaychuk
b083aed245 Doc cleanup 2010-10-07 05:57:27 -07:00
Tj Holowaychuk
0faac20d53 Regenerated docs 2010-10-07 05:53:14 -07:00
Tj Holowaychuk
cef14ca7cd Fixed docs 2010-10-07 05:53:02 -07:00
Tj Holowaychuk
090debe0df Regenerated docs 2010-10-07 05:49:35 -07:00
Tj Holowaychuk
296f1270ee Ordering docs 2010-10-07 05:49:19 -07:00
Tj Holowaychuk
334a18a114 Regenerated docs 2010-10-07 05:46:39 -07:00
Tj Holowaychuk
dd4ddae082 Added route middleware docs 2010-10-07 05:46:26 -07:00
Tj Holowaychuk
4983e967bc Added route-middleware example 2010-10-07 05:28:09 -07:00
Tj Holowaychuk
0b5e2f14ed Updated ejs submodule 2010-10-07 04:28:11 -07:00
Tj Holowaychuk
70102aecb5 Fixed mvc example 2010-10-07 04:15:34 -07:00
Tj Holowaychuk
ae75153561 Merge branch 'features/route-middleware' 2010-10-07 03:49:58 -07:00
Tj Holowaychuk
dd23d60513 Recursively apply route middleware 2010-10-07 03:49:38 -07:00
Tj Holowaychuk
db95481b76 Added another route middleware test 2010-10-07 03:46:20 -07:00
Tj Holowaychuk
3e0da535b9 Implemented route middleware with arrays 2010-10-07 03:45:23 -07:00
Tj Holowaychuk
c74602551e Added test for multiple route middleware 2010-10-07 03:40:54 -07:00
Tj Holowaychuk
1722e2c7a5 Implemented route middleware support 2010-10-07 03:30:39 -07:00
Tj Holowaychuk
8a845e2951 Auth example using route middleware 2010-10-07 03:21:07 -07:00
Tj Holowaychuk
72765bada0 Typo in auth example 2010-10-07 03:16:40 -07:00
Tj Holowaychuk
b380f180cc Links 2010-10-07 02:36:34 -07:00
Tj Holowaychuk
f1799799a1 Regenerated guide 2010-10-06 08:26:01 -07:00
Tj Holowaychuk
4bc8a8673d More session docs 2010-10-06 08:25:49 -07:00
Tj Holowaychuk
cbdd907393 Added logger to pages example 2010-10-05 06:31:21 -07:00
Tj Holowaychuk
aa7ff3ef47 typo 2010-10-05 06:27:17 -07:00
Tj Holowaychuk
ebdf6434eb Fixing up examples a bit 2010-10-05 06:14:19 -07:00
Tj Holowaychuk
9b7470d204 Exposing ./support libs to examples 2010-10-05 06:08:53 -07:00
Tj Holowaychuk
9f3ab8683c Added log lines to more examples 2010-10-05 06:01:26 -07:00
Tj Holowaychuk
fa464aca90 Updated jade submodule 2010-10-05 05:56:42 -07:00
Tj Holowaychuk
2724ce368a Rebuilt docs 2010-10-04 11:17:29 -07:00
Tj Holowaychuk
89f7cbe877 Added session usage docs. Closes #443 2010-10-04 11:16:46 -07:00
Tj Holowaychuk
fab9af2206 Merge branch 'range' 2010-10-04 11:06:15 -07:00
Tj Holowaychuk
4d01b4fa59 Handling invalid ranges 2010-10-04 08:36:57 -07:00
Tj Holowaychuk
c3365aa37e Merge branch 'master' into range 2010-10-04 08:14:30 -07:00
Tj Holowaychuk
426e80d4c3 Updated jade submodule 2010-10-04 08:04:00 -07:00
Tj Holowaychuk
30a282d126 Updated connect submodule 2010-10-04 08:03:51 -07:00
Tj Holowaychuk
0a96621e3e Docs for layout option 2010-10-04 08:01:17 -07:00
Tj Holowaychuk
d9d30abe7a Updated docs to use NODE_ENV 2010-10-01 16:33:27 -07:00
Tj Holowaychuk
03b56d8140 Implement NODE_ENV, EXPRESS_ENV is now deprecated
spark, connect, and express will from now on utilize NODE_ENV.
EXPRESS_ENV support will remain until 1.0
2010-10-01 16:31:32 -07:00
Tj Holowaychuk
1f79ce4e96 Updated connect submodule 2010-10-01 16:26:09 -07:00
Tj Holowaychuk
8d80f23a0f antialiased text 2010-10-01 07:53:56 -07:00
Tj Holowaychuk
d89b951451 HTTP verb docs. Closes #415 2010-10-01 07:51:19 -07:00
Tj Holowaychuk
1906a38ec8 express(1) app using 2 spaces instead of 4 2010-09-26 08:24:48 -07:00
Tj Holowaychuk
8d91a3e3b8 Updated jade submodule 2010-09-23 09:24:56 -07:00
Tj Holowaychuk
3324259977 Updated connect submodule 2010-09-23 09:24:52 -07:00
Tj Holowaychuk
ec2db2d541 Fixed mvc example listen() call 2010-09-22 16:08:38 -07:00
Tj Holowaychuk
5cf248c7f3 Merge branch 'auth-example' 2010-09-22 12:03:28 -07:00
Tj Holowaychuk
3876a566ff Added authentication example
very raw and minimal but gives people and idea
2010-09-22 12:03:18 -07:00
Tj Holowaychuk
334e6cc618 Started auth example 2010-09-22 10:36:15 -07:00
Tj Holowaychuk
64033fcfc2 Extended utils.parseRange() 2010-09-22 09:34:05 -07:00
Tj Holowaychuk
fbe3af4719 Added utils.parseRange() tests 2010-09-22 09:29:25 -07:00
Tj Holowaychuk
699ed4ee85 Started naive Range support 2010-09-22 09:06:11 -07:00
Tj Holowaychuk
903f67a154 Started utils.parseRange() 2010-09-22 08:48:22 -07:00
Tj Holowaychuk
9a89dab9e0 Added Range test 2010-09-22 08:41:20 -07:00
Tj Holowaychuk
435a2565b8 Added Accept-Ranges: bytes 2010-09-22 08:29:48 -07:00
Tj Holowaychuk
8267b8da57 Added res.sendfile() Accept-Ranges test 2010-09-22 08:29:22 -07:00
Tj Holowaychuk
8b5773c246 Multipart typo 2010-09-21 12:38:42 -07:00
Tj Holowaychuk
fd4c88d202 Updated docs 2010-09-21 09:21:11 -07:00
Tj Holowaychuk
9b26623aa5 View scope now defaults to the request
No longer the response, as this is more useful for obtaining urls etc
2010-09-21 09:20:04 -07:00
Tj Holowaychuk
b115ec7c14 "context" option is no more, use "scope" 2010-09-21 09:18:22 -07:00
Tj Holowaychuk
a2e6e2a06a Pass true for res.sendfile() callback when streamed
This is potentially useful since we can no longer
respond, however with readFile() we can respond with a 500
page or similar
2010-09-21 08:51:07 -07:00
Tj Holowaychuk
f0eab06a8b Updated docs 2010-09-20 09:54:01 -07:00
Tj Holowaychuk
b6c839d693 Release 1.0.0rc3 2010-09-20 09:50:38 -07:00
Tj Holowaychuk
177a724d58 res.sendfile() responding with 403 on malicious path 2010-09-20 09:16:01 -07:00
Tj Holowaychuk
949803dcf6 Merge branch 'downloads' 2010-09-20 09:06:46 -07:00
Tj Holowaychuk
b763a88e60 Docs for "stream threshold" setting 2010-09-20 09:06:43 -07:00
Tj Holowaychuk
18c7f164a8 res.sendfile() using sys.pump() when >= "stream threshold" 2010-09-20 08:41:08 -07:00
Tj Holowaychuk
e037ff6bba Added Content-Length assertion for res.sendfile() 2010-09-20 08:23:16 -07:00
Tj Holowaychuk
95bfda1ff0 res.sendfile() using fs.stat() 2010-09-20 08:19:21 -07:00
Tj Holowaychuk
b9992e0b45 Refactored res.sendfile() 2010-09-20 08:18:38 -07:00
Tj Holowaychuk
f6ba793885 Merge branch 'download-example' 2010-09-18 10:25:05 -07:00
Tj Holowaychuk
bbe65a8ea3 Fixed res.download() bug; when an error occurs remove Content-Disposition
Previously if you tried to show a 404 page (or similar)
on a failed res.download(), the browser would still prompt for download
2010-09-18 10:25:00 -07:00
Tj Holowaychuk
20af7371d0 Added download example 2010-09-18 10:21:37 -07:00
Tj Holowaychuk
a33fb0c439 Added widescript link 2010-09-14 15:56:21 -07:00
Tj Holowaychuk
87003c8b5b Fixed tests for node --version 0.2.1 2010-09-14 08:18:13 -07:00
Tj Holowaychuk
ddd48ee79f Added LICENSE as requested by davglass 2010-09-14 07:59:30 -07:00
Tj Holowaychuk
a9819df3ee res.send() HEAD support 2010-09-13 12:05:28 -07:00
Tj Holowaychuk
15dffb22aa Updated connect submodule 2010-09-13 11:58:49 -07:00
Tj Holowaychuk
6ef5f1ff62 Merge branch 'integration' 2010-09-13 11:24:33 -07:00
Tj Holowaychuk
acc28c68a4 Refactored app.set() 2010-09-13 11:24:20 -07:00
Aaron Heckmann
6c2da60eb0 add test for inherited mounted app settings 2010-09-13 11:20:49 -07:00
Aaron Heckmann
490081077d mounted apps settings now inherited from parent app 2010-09-13 11:20:49 -07:00
Tj Holowaychuk
f4a08092da Merge branch 'guide' 2010-09-13 11:14:55 -07:00
Tj Holowaychuk
0116efd4a3 Removed manpage crap from site 2010-09-13 11:14:41 -07:00
Tj Holowaychuk
9719a24f8a Toggling menus 2010-09-13 11:11:47 -07:00
Tj Holowaychuk
3a7d5a099b TOC sections 2010-09-13 11:03:17 -07:00
Tj Holowaychuk
27dba655fc Uncommented cookie assertions previously failing 2010-09-13 10:11:28 -07:00
Tj Holowaychuk
a25dd387bf Refactored res.redirect() 2010-09-13 10:10:03 -07:00
Tj Holowaychuk
a89767cc16 Cookie docs 2010-09-13 09:52:33 -07:00
Tj Holowaychuk
a13df5b68d Added test for res.clearCookie() 2010-09-13 09:44:42 -07:00
Tj Holowaychuk
6a689504ff Fixed res.cookie() test 2010-09-13 09:44:02 -07:00
Tj Holowaychuk
6521d2bcfb Merge branch 'features/cookie' 2010-09-13 09:43:37 -07:00
Tj Holowaychuk
26d55b15de Added cookies example 2010-09-13 09:43:13 -07:00
Tj Holowaychuk
041b7e8a29 Added res.cookie() and res.clearCookie() 2010-09-13 09:43:07 -07:00
Tj Holowaychuk
6eeb425e7a Updated jade submodule 2010-09-11 13:09:39 -07:00
Tj Holowaychuk
d2d0eb829e Updated jade submodule 2010-09-10 13:19:14 -07:00
Tj Holowaychuk
058505b664 Updated connect submodule 2010-09-10 13:19:11 -07:00
Tj Holowaychuk
8adecedb40 Added test to confirm view helper usage w/ ejs 2010-09-08 10:49:29 -07:00
Tj Holowaychuk
838a51db21 Merge branch 'master' of github.com:visionmedia/express 2010-09-06 14:06:50 -07:00
Tj Holowaychuk
4d4dfc27fc Updated connect submodule 2010-09-06 14:06:35 -07:00
Tj Holowaychuk
1444439cf3 Wiki 2010-09-06 11:37:48 -07:00
Tj Holowaychuk
e64fc8d5ab node dep 2010-09-06 11:03:33 -07:00
Tj Holowaychuk
9a31f772d9 Added contrib link 2010-09-06 10:59:56 -07:00
Tj Holowaychuk
12876ee4ce Added res.send() as 204 in the guide 2010-09-06 10:15:32 -07:00
Tj Holowaychuk
a4a349da45 Stripping Content-Length / Content-Type when 204 2010-09-06 10:10:59 -07:00
Tj Holowaychuk
ecbc3cae71 res.send() as 204. Closes #419 2010-09-06 10:05:39 -07:00
Tj Holowaychuk
57609c87fb Merge branch 'features/render-status' 2010-09-06 09:44:46 -07:00
Tj Holowaychuk
bb2e24e028 Added docs for render() status / headers 2010-09-06 09:44:32 -07:00
Tj Holowaychuk
5cafb26e93 Fixed pages example w/ render() status 2010-09-06 09:43:17 -07:00
Tj Holowaychuk
f74ef7b293 Added render() headers option 2010-09-06 09:42:00 -07:00
Tj Holowaychuk
7ef8f531e7 Added render() status option support. Closes #425 2010-09-06 09:38:23 -07:00
Tj Holowaychuk
afb65c7b19 Added render() status test 2010-09-06 09:36:22 -07:00
Tj Holowaychuk
74a0673663 Better app.helper() test 2010-09-06 09:11:27 -07:00
Tj Holowaychuk
20fae6e512 Updated jade submodule 2010-09-02 17:08:08 -07:00
Tj Holowaychuk
509cd242f7 Updated connect submodule 2010-09-02 17:06:50 -07:00
Tj Holowaychuk
f01ec516eb Updated connect submodule 2010-09-02 09:50:04 -07:00
Tj Holowaychuk
394b1000d2 Updated ejs submodule 2010-08-30 17:46:16 -07:00
Tj Holowaychuk
e0b9fba788 Updated jade submodule 2010-08-30 17:46:13 -07:00
Tj Holowaychuk
378ee29cc2 Updated connect submodule 2010-08-30 16:14:06 -07:00
Tj Holowaychuk
02bcef71dd Updated jade submodule 2010-08-27 13:47:48 -07:00
Tj Holowaychuk
248e7c8003 Updated connect submodule 2010-08-27 13:47:41 -07:00
Tj Holowaychuk
a2e93ebd56 Fixed Connect links 2010-08-27 12:40:33 -07:00
Tj Holowaychuk
21a9454de1 Merge branch 'confirmation' 2010-08-27 12:38:23 -07:00
Tj Holowaychuk
ec286eed08 Added confirmation for express(1) app generation. Closes #391 2010-08-27 12:38:19 -07:00
Tj Holowaychuk
f16978d1fe Added flash formatter docs 2010-08-27 12:17:57 -07:00
Tj Holowaychuk
fa3adc7606 Merge branch 'flash-formatting' 2010-08-27 12:15:23 -07:00
Tj Holowaychuk
192144fc5d Added extending of flash formatters via app.flashFormatters 2010-08-27 12:15:18 -07:00
Tj Holowaychuk
a4d155c5e4 Added flash formatter support. Closes #411 2010-08-27 12:09:55 -07:00
Tj Holowaychuk
6c56e9d199 Added failing assertion for flash formatters 2010-08-27 11:59:29 -07:00
Tj Holowaychuk
bb18f87a98 Merge branch 'fix-toc' 2010-08-27 10:13:13 -07:00
Tj Holowaychuk
dda6a31381 Fixed TOC. Closes #404 [thanks weaver] 2010-08-27 10:13:08 -07:00
Tj Holowaychuk
6e25e18e98 express(1) now outputting listening msg, and express.MIDDLEWARE vs connect.MIDDLWARE 2010-08-24 13:52:26 -07:00
Tj Holowaychuk
ffd978c24f Updated node --version support 2010-08-24 13:35:40 -07:00
Tj Holowaychuk
4c4af03a5a Doc typos 2010-08-24 13:22:52 -07:00
Tj Holowaychuk
c0739bb8b7 Fixed bug messing with error handlers when listenFD() is called instead of listen(). [thanks guillermo]
programs such as "spark" call listenFD() to call listen(1) with
a file descriptor, BUT Express was only proxying listen()
to register these handlers. Thanks for catching this bug guillermo!
2010-08-24 13:21:28 -07:00
Tj Holowaychuk
5add7cb0b1 Merge branch 'mvc' 2010-08-24 13:06:53 -07:00
Tj Holowaychuk
99f49f1061 Fixed MVC 500 error example 2010-08-24 13:06:50 -07:00
Tj Holowaychuk
401eaca9ab Mvc example typo 2010-08-24 12:58:30 -07:00
Tj Holowaychuk
da784fe02b Added 500 page to mvc example 2010-08-24 12:56:34 -07:00
Tj Holowaychuk
d507b29559 Added .json format support to the mvc example 2010-08-24 12:10:29 -07:00
Tj Holowaychuk
35ca13b38d Merge branch 'form' 2010-08-24 10:49:56 -07:00
Tj Holowaychuk
04b92a31a8 Added keepExtensions: true to multipart example 2010-08-24 10:49:52 -07:00
Tj Holowaychuk
dd311d759d Better 404 Not Found example 2010-08-20 21:39:35 -07:00
Tj Holowaychuk
b504ca9f0a Merged mvc example. Closes #405 2010-08-20 18:09:56 -07:00
Tj Holowaychuk
bd61c5c721 Fixed hasMessages dynamic helper 2010-08-20 18:04:01 -07:00
Tj Holowaychuk
24694b0047 mvc styling 2010-08-20 18:03:12 -07:00
Tj Holowaychuk
5258154285 Added 404 page to mvc example 2010-08-20 17:58:29 -07:00
Tj Holowaychuk
221f993b46 Misc refactoring of mvc example 2010-08-20 17:53:55 -07:00
Tj Holowaychuk
ae5ea70b93 Editing of email for mvc example as well 2010-08-20 17:29:01 -07:00
Tj Holowaychuk
f59ffbeb63 Implemented simple user editing 2010-08-20 17:27:21 -07:00
Tj Holowaychuk
ce55275634 ejs parsing *.html for mvc example 2010-08-20 17:11:30 -07:00
Tj Holowaychuk
20c5892f9a More work on mvc example 2010-08-20 17:08:10 -07:00
Tj Holowaychuk
9231245a3f Started mvc example 2010-08-20 16:50:23 -07:00
Tj Holowaychuk
cbfed20e6f Updated ejs submodule 2010-08-20 16:23:49 -07:00
Tj Holowaychuk
640274ed52 Merge branch 'redirect-bodies' 2010-08-20 12:30:06 -07:00
Tj Holowaychuk
1507a39a2b res.redirect() using res.send()
Allows for setting of arbitrary headers via res.header()
2010-08-20 12:21:29 -07:00
Tj Holowaychuk
e6405653d8 Added res.redirect() Content-Type of text/plain for now 2010-08-20 12:19:08 -07:00
Tj Holowaychuk
be1541a646 Added res.redirect() response bodies 2010-08-20 12:17:52 -07:00
Tj Holowaychuk
f37f9bf5e3 Updated connect submodule 2010-08-20 08:42:18 -07:00
Tj Holowaychuk
a5c39ca8c8 Merge branch 'set-cookie' 2010-08-20 08:41:10 -07:00
Tj Holowaychuk
cb7e7b2a74 Pass res.send() headers through res.header() 2010-08-20 08:41:06 -07:00
Tj Holowaychuk
2e8e705bab Fixed multiple Set-Cookie headers via res.header(). Closes #402 2010-08-20 08:29:21 -07:00
Tj Holowaychuk
ab3812432b Updated expresso submodule 2010-08-19 11:44:42 -07:00
Tj Holowaychuk
d2acb36e3b Updated connect submodule 2010-08-19 11:44:40 -07:00
Tj Holowaychuk
601743ff7a Added boilerplate example 2010-08-18 17:41:06 -07:00
Tj Holowaychuk
7eca74ac05 Updated node --version in readme 2010-08-17 16:45:42 -07:00
Tj Holowaychuk
02b4ec04bb Doc typos 2010-08-17 16:08:02 -07:00
Tj Holowaychuk
8ead9014d0 Regenerated docs again 2010-08-17 13:15:54 -07:00
Tj Holowaychuk
4920e82dd6 Regenerated docs 2010-08-17 13:12:21 -07:00
Tj Holowaychuk
3150253661 Release 1.0.0rc2 2010-08-17 13:09:17 -07:00
Tj Holowaychuk
baa423b45a Updated connect submodule 2010-08-16 13:49:33 -07:00
Tj Holowaychuk
77e5d8ea96 Added app.register() docs 2010-08-15 10:20:33 -07:00
Tj Holowaychuk
9a8166d649 Added app.register() for template engine mapping. Closes #390
This is not exactly what you requested, but
I think this is a better approach. With old Express
I used to have "foo.ejs.html" "foo.haml.html" etc,
but that is super verbose.

This will allow for non-authors to support non-compliant
engines without modifying the original module, as well
as having things like .html render with jade
2010-08-15 10:13:47 -07:00
Tj Holowaychuk
da8c0cd2db Removed clearCache()
its useless ATM
2010-08-15 09:54:51 -07:00
Tj Holowaychuk
fc2711b543 Fixed bug with undefined path 2010-08-12 14:57:36 -07:00
Tj Holowaychuk
b4327bd36c Merge branch 'render-callback' 2010-08-11 16:29:10 -07:00
Tj Holowaychuk
f7f75923aa Added res.render() callback support as second argument
This previously was not valid:

    res.render(foo, function(){});
2010-08-11 16:28:24 -07:00
Tj Holowaychuk
0b4388bc5b Added test to confirm res.render() callback with layouts 2010-08-11 16:25:31 -07:00
Tj Holowaychuk
f08883071f Updated app list 2010-08-11 10:11:20 -07:00
Tj Holowaychuk
bb8a2ee3a6 Updated expresso submodule 2010-08-11 09:32:59 -07:00
Tj Holowaychuk
6bfa7595d8 Added callback support to res.download() 2010-08-09 16:11:00 -07:00
Tj Holowaychuk
8308e501cd Fixed res.sendfile() error handling, defer via next()
No need to be so specific here.
2010-08-09 16:04:41 -07:00
Tj Holowaychuk
25909c0d9d Added callback support for res.sendfile() 2010-08-09 16:00:23 -07:00
Tj Holowaychuk
2844b1ac38 Fixed test labels 2010-08-09 15:57:27 -07:00
Tj Holowaychuk
6fd62b1cee No need to pass params in app.redirect() 2010-08-09 09:19:44 -07:00
Tj Holowaychuk
1579f53a61 Updated connect submodule 2010-08-09 08:50:33 -07:00
Tj Holowaychuk
7af7851952 Fixed res.download() test 2010-08-09 08:06:01 -07:00
Tj Holowaychuk
5dbd1a6dcc Merge branch 'format-example' 2010-08-09 08:03:00 -07:00
Tj Holowaychuk
24881537a1 Fixed format example 2010-08-09 08:02:38 -07:00
Tj Holowaychuk
631c29b26b Updated connect submodule 2010-08-09 07:57:45 -07:00
Tj Holowaychuk
ab249d4032 Added format example 2010-08-09 07:46:29 -07:00
Tj Holowaychuk
5bfa3f6274 Merge branch 'helper-precedence' 2010-08-09 07:32:20 -07:00
Tj Holowaychuk
82ee25dfaa Added test helper local precedence test 2010-08-09 07:32:12 -07:00
Tj Holowaychuk
fd9a24553f Added another dynamicHelper example to flash example 2010-08-09 07:22:33 -07:00
Tj Holowaychuk
ae1c20fad9 Fixed flash example. Closes #392 2010-08-09 07:19:55 -07:00
Tj Holowaychuk
734f777ff9 Added failing test for view helper precedence 2010-08-06 16:13:21 -07:00
Tj Holowaychuk
498115d5d9 Merge branch 'fix-error' 2010-08-06 09:04:08 -07:00
Tj Holowaychuk
033ff06b68 More app.error() docs 2010-08-06 09:04:04 -07:00
Tj Holowaychuk
c145a8e1a1 Changed "pages" example to show error() handlers defined above routes 2010-08-06 09:01:09 -07:00
Tj Holowaychuk
ae5b0dbc29 Fixed issue preventing error handlers from being defined anywhere. Closes #387
Now we can define them in configure() callbacks etc
2010-08-06 08:59:16 -07:00
Tj Holowaychuk
95aa957c80 Altered app.error() tests to reflect issue #387 2010-08-06 08:48:17 -07:00
Tj Holowaychuk
7dff9ddeeb Merge branch 'flash-example' 2010-08-05 17:12:33 -07:00
Tj Holowaychuk
b4e755747f Fixed dynamic helper in flash example 2010-08-05 17:12:18 -07:00
Tj Holowaychuk
348fa402be Started flash example 2010-08-05 16:51:07 -07:00
Tj Holowaychuk
344218ff3d Updated docs 2010-08-05 16:19:06 -07:00
Tj Holowaychuk
90a1a2febf Updated examples to use express.<middleware> 2010-08-05 16:10:22 -07:00
Tj Holowaychuk
e234a24894 Re-exporting connect middleware auto-loaders 2010-08-05 15:56:33 -07:00
Tj Holowaychuk
d9beb75bd6 Updated connect submodule 2010-08-05 15:51:27 -07:00
Tj Holowaychuk
dadea8c83d Merge branch 'fix-layouts' 2010-08-05 13:57:02 -07:00
Tj Holowaychuk
31d40e5509 Updated connect submodule 2010-08-05 13:32:22 -07:00
Tj Holowaychuk
a917e84b51 Fixed latest test 2010-08-05 11:59:58 -07:00
Tj Holowaychuk
f30b497206 Added failing layout test 2010-08-05 11:47:35 -07:00
Tj Holowaychuk
706e32c20b Merge branch 'app-level-view-options' 2010-08-05 09:46:03 -07:00
Tj Holowaychuk
4d98552c37 Docs for "view options" 2010-08-05 09:45:56 -07:00
Tj Holowaychuk
5311bd3f4e Added app level view options
via the "view options" setting
2010-08-05 09:41:26 -07:00
Tj Holowaychuk
8d716fb7ba Added test for "view options" setting 2010-08-05 09:31:14 -07:00
Tj Holowaychuk
01b3caaf49 Updated ejs submodule 2010-08-05 09:21:47 -07:00
Tj Holowaychuk
cd73c0b9ca Updated expresso submodule 2010-08-05 08:48:25 -07:00
Tj Holowaychuk
7ec5230402 make install-docs creating PREFIX/share/man/man1 when not present 2010-08-04 09:45:16 -07:00
Tj Holowaychuk
9dbe026f83 make install creating ~/.node_libraries when not present 2010-08-04 09:43:58 -07:00
Tj Holowaychuk
3fae10da3e Merge branch 'integration' 2010-08-04 09:13:25 -07:00
Tj Holowaychuk
d775154b92 Added "partials" setting to docs 2010-08-04 09:13:21 -07:00
Tj Holowaychuk
6c306b3542 Fixed "partials" setting 2010-08-04 09:10:58 -07:00
Nick Poulden
58b46ffeac Optionally set partials directory 2010-08-04 09:04:50 -07:00
Tj Holowaychuk
0bb7b7c60e Updated connect submodule 2010-08-04 08:35:16 -07:00
Tj Holowaychuk
58adf9a385 Updated jade submodule 2010-08-04 08:33:18 -07:00
Tj Holowaychuk
d6ba968ace Updated expresso 2010-08-04 07:56:26 -07:00
Tj Holowaychuk
1706721a62 Updated ejs 2010-08-04 07:56:11 -07:00
Tj Holowaychuk
7f88bd2eaf Added isLayout property
Aid introspection for another project I am working on
2010-08-03 15:52:20 -07:00
Tj Holowaychuk
b819366265 Updated docs 2010-08-03 14:53:35 -07:00
Tj Holowaychuk
47ff7d9dba Fixed doc typo 2010-08-03 14:53:31 -07:00
Tj Holowaychuk
e5f5254877 Added default expresso tests to express(1) generated app. Closes #384 2010-08-03 09:57:24 -07:00
Tj Holowaychuk
4778f728f9 Updated ejs submodule 2010-08-02 10:37:03 -07:00
Tj Holowaychuk
e80e4573be Updated jade submodule 2010-08-02 09:04:50 -07:00
Tj Holowaychuk
fdf0f3f282 Fixed multipart app example 2010-08-02 07:35:38 -07:00
Tj Holowaychuk
a81fce47d0 Updated docs 2010-07-31 07:18:35 -07:00
Tj Holowaychuk
2cd6989b11 Fixed some inline comments 2010-07-31 07:18:29 -07:00
Tj Holowaychuk
21abb0d205 Fixed readme version of node 2010-07-30 18:09:51 -07:00
Tj Holowaychuk
5e1a271ca2 Fixed res.render() callback when a layout is used [thanks guillermo] 2010-07-30 16:52:35 -07:00
Tj Holowaychuk
868e4c41e1 Added storify link 2010-07-30 12:51:50 -07:00
Tj Holowaychuk
a6e23bb713 Fixed connect dependency version 2010-07-30 10:50:54 -07:00
Tj Holowaychuk
446406dd62 Removed --growl from make test 2010-07-30 10:47:00 -07:00
Tj Holowaychuk
091f9f7eae Test typo 2010-07-30 10:45:35 -07:00
Tj Holowaychuk
10b1e06263 Updated docs 2010-07-30 10:41:12 -07:00
Tj Holowaychuk
a8865a51fd Misc docs 2010-07-30 10:29:58 -07:00
Tj Holowaychuk
32343297fc Updated docs 2010-07-30 10:21:33 -07:00
Tj Holowaychuk
aaa5deb0c0 Release 1.0.0rc 2010-07-30 10:16:30 -07:00
Tj Holowaychuk
808c519a1f Added doc contrib .. docs :) 2010-07-28 12:48:41 -07:00
Tj Holowaychuk
262b110f9f Removed "reload views" setting and support code
development env will always bypass cache,
however production will not
2010-07-28 11:22:29 -07:00
Tj Holowaychuk
d0fe19f996 Added e-resistible.co.uk link 2010-07-28 09:39:29 -07:00
Tj Holowaychuk
8e6675677f Removed direct CONNECT_ENV support
it is now SPARK_ENV, grr tim
2010-07-28 08:55:13 -07:00
Tj Holowaychuk
82dbae6185 Check CONNECT_ENV before connectEnv.name 2010-07-28 08:52:49 -07:00
Aaron Heckmann
943f1df325 typo 2010-07-28 08:27:51 -07:00
Tj Holowaychuk
018abcfe5f Added jade submodule back. Closes #376
This should work hopefully,
not sure what happened there probably
because I forced a push yesterday
2010-07-28 08:25:33 -07:00
Tj Holowaychuk
6b4f716508 Removed jade 2010-07-28 08:24:46 -07:00
Tj Holowaychuk
82b6ff0c28 Added http://clickdummy.net/ link 2010-07-27 15:33:35 -07:00
Tj Holowaychuk
d0c3132a63 Updated jade submodule 2010-07-27 14:23:22 -07:00
Tj Holowaychuk
02f0252dea Added http://codeshelver.com/ link 2010-07-27 12:23:21 -07:00
Tj Holowaychuk
74b3921eee Undocumented cache option
Dont pass this manually,
production mode sets cache to true
2010-07-27 12:14:57 -07:00
Tj Holowaychuk
1695c79021 Added wtfjs.com 2010-07-27 10:06:09 -07:00
Tj Holowaychuk
a3b0534b86 Updated docs 2010-07-27 10:03:52 -07:00
Tj Holowaychuk
a13f94d40f Updated node news url 2010-07-27 09:42:16 -07:00
Tj Holowaychuk
73288420a8 Added "Apps using express" section, PM me to add to the list 2010-07-27 09:30:27 -07:00
Tj Holowaychuk
e224387eb4 Misc refactoring 2010-07-27 09:08:40 -07:00
Tj Holowaychuk
626d322639 < 78 cols in view.js so people stop complaining :D 2010-07-27 09:07:37 -07:00
Tj Holowaychuk
7dce7a84c7 Added connect to package.json 2010-07-27 08:10:33 -07:00
Tj Holowaychuk
6234268f10 Updated docs 2010-07-26 17:02:31 -07:00
Tj Holowaychuk
7a1525c568 Defaulting app.enable("reload views") to 500ms 2010-07-26 17:01:08 -07:00
Tj Holowaychuk
fe99eb7147 Fixed a dynamic helper assertion 2010-07-26 13:50:06 -07:00
Tj Holowaychuk
d691ecbea3 Updated docs 2010-07-26 13:49:37 -07:00
Tj Holowaychuk
f60bcca893 Updated examples 2010-07-26 13:36:21 -07:00
Tj Holowaychuk
75661a2266 Route callback signature changed
it is now like Express used to be: (req, res, next)
instead of: (req, res, params, next)

access via req.params
2010-07-26 13:29:16 -07:00
Tj Holowaychuk
1026f361ef req.params.get is now req.query 2010-07-26 13:27:12 -07:00
Tj Holowaychuk
69fe203006 Fixed param tests 2010-07-26 13:25:04 -07:00
Tj Holowaychuk
f8ccaa3a81 Updated configuration docs 2010-07-26 09:57:07 -07:00
Tj Holowaychuk
c10a0a0cdf Style fixes 2010-07-26 09:49:04 -07:00
ewoudj
aceb6ab666 Fixed issue where options.cache was always ignored in view.js. 2010-07-26 09:48:31 -07:00
Tj Holowaychuk
c3a2aff9d3 Blog example using "home" 2010-07-26 08:59:26 -07:00
Tj Holowaychuk
c9e41db826 Updated express(1). Closes #365 2010-07-26 08:48:34 -07:00
Tj Holowaychuk
1e7a12fff5 New "home" docs 2010-07-26 08:42:40 -07:00
Tj Holowaychuk
ba88e48f6a Rebuilt docs 2010-07-26 08:36:11 -07:00
Tj Holowaychuk
52979662c5 Added docs for Server#mounted() 2010-07-26 08:30:10 -07:00
Tj Holowaychuk
50e6d80065 Added mounted hook. Closes #369 2010-07-26 08:27:36 -07:00
Tj Holowaychuk
16a24cfeac Merge branch 'fix-home' 2010-07-26 08:12:22 -07:00
Tj Holowaychuk
bab095e5b5 Fixed "home" setting
Now when you use() an app, both the mounted
route and previous home setting are respected.

For example if you have an app mounted to
/blog, and "home" for blog is /posts, home
will become "/blog/posts"
2010-07-26 08:12:18 -07:00
Tj Holowaychuk
b1a3b078e9 Added failing "home" setting test 2010-07-26 08:01:26 -07:00
Tj Holowaychuk
baae44610a Merge branch 'fix-config' 2010-07-26 07:49:34 -07:00
Tj Holowaychuk
8d2dffe5b4 Fixed middleware/router precedence issue. Closes #366
You can now "use" your router in configure()
blocks where ever you wish, ex:

  app.use(connect.bodyDecoder())
  app.use(app.router)
  app.use(connect.staticProvider())
2010-07-26 07:49:29 -07:00
Tj Holowaychuk
7b3eb23af8 Fixed; configure() callbacks called immediately. Closes #368 2010-07-26 07:45:26 -07:00
Tj Holowaychuk
fb526846fe Added failing test for config precedence 2010-07-26 07:35:38 -07:00
Tj Holowaychuk
6bd1371283 Added app.configure() immediate call test 2010-07-26 07:32:57 -07:00
Tj Holowaychuk
3c8c7af196 Updated docs 2010-07-23 17:14:09 -07:00
Tj Holowaychuk
929b43ed48 Fixed changelog typo 2010-07-23 17:09:57 -07:00
Tj Holowaychuk
a947064b7d Release 1.0.0beta2 2010-07-23 17:06:47 -07:00
Tj Holowaychuk
5bc9866f43 Added range example to resource 2010-07-23 16:57:12 -07:00
Tj Holowaychuk
61d82e210a Added / to resource example 2010-07-23 16:50:30 -07:00
Tj Holowaychuk
a876ac9386 Updated submodules 2010-07-23 16:42:08 -07:00
Tj Holowaychuk
da1502c463 Updated expresso submodule 2010-07-23 16:12:27 -07:00
Tj Holowaychuk
76bb782f64 Added support for absolute view paths 2010-07-23 16:12:07 -07:00
Tj Holowaychuk
e6f4b043cb Added test for absolute view path 2010-07-23 16:10:15 -07:00
Tj Holowaychuk
d651ffaf2e Added failing test for absolute layouts 2010-07-23 16:09:06 -07:00
Tj Holowaychuk
e554378b5e s/foo/relative/ 2010-07-23 16:07:58 -07:00
Tj Holowaychuk
b463bd797e Added test for layouts in a directory 2010-07-23 16:07:36 -07:00
Tj Holowaychuk
699e6e16c9 Merge branch 'render-next' 2010-07-22 14:15:05 -07:00
Tj Holowaychuk
f8477c41e1 res.render() exceptions passed to next() when no callback is given 2010-07-22 14:14:59 -07:00
Tj Holowaychuk
9a63333aec Added test for async render exceptions without callback 2010-07-22 14:09:53 -07:00
Tj Holowaychuk
6e40914258 No more http git submodules 2010-07-22 14:08:24 -07:00
Tj Holowaychuk
56a1dd931e No "or similar" for curl install
Because you need curl in install.sh anyways :D silly me
2010-07-22 13:14:50 -07:00
Tj Holowaychuk
57fd2e6a52 Fixed typo in install.sh 2010-07-22 13:09:01 -07:00
Tj Holowaychuk
113db06cdd Github example now using splat and splitting on /
try:

  http://dev:3000/repos/visionmedia/creationix/isaacs
2010-07-22 12:07:54 -07:00
Tj Holowaychuk
4ee5c59cfd Misc refactoring of github example 2010-07-22 11:56:23 -07:00
Tj Holowaychuk
15812678a3 Added compare view to github example
example visit:

    /repos/visionmedia..someoneelse

This helps illustrate that a RegExp literal can be used
2010-07-22 11:53:45 -07:00
Tj Holowaychuk
ee0379b321 Prepping github example for compare view 2010-07-22 11:23:44 -07:00
Tj Holowaychuk
dcf279177d Fixed tests due to params.splat removal 2010-07-22 11:04:54 -07:00
Tj Holowaychuk
01115824f7 Updated docs 2010-07-22 11:02:47 -07:00
Tj Holowaychuk
b68473ae11 Multi-file example from blog. Closes #364 2010-07-22 09:28:59 -07:00
Tj Holowaychuk
a65c203c9b Split blog example into another file 2010-07-22 09:14:29 -07:00
Tj Holowaychuk
0a848240d4 Fixed typo in docs 2010-07-22 08:46:12 -07:00
Tj Holowaychuk
d03821b88a Docs for params.captures. Closes #358 2010-07-22 08:30:15 -07:00
Tj Holowaychuk
4d32762899 Updated docs 2010-07-22 08:17:00 -07:00
Tj Holowaychuk
2cb4b6d16d Added test for "env" setting 2010-07-22 08:14:48 -07:00
Tj Holowaychuk
b770e566dd "home" setting defaults to Server#route. Closes #363 2010-07-22 08:13:42 -07:00
Tj Holowaychuk
51ebc88f0c Assert blog.route 2010-07-22 08:07:05 -07:00
Tj Holowaychuk
a04a75724d Added app mounting test 2010-07-22 08:06:06 -07:00
Tj Holowaychuk
6e5af3d799 Added mkdir to install.sh Closes #362 2010-07-22 06:21:30 -07:00
Tj Holowaychuk
0283a73a32 Removed instanceof Array check 2010-07-21 14:49:15 -07:00
Tj Holowaychuk
5f593031f0 Added --growl flag to make test 2010-07-21 13:05:48 -07:00
Tj Holowaychuk
0eeef2d4bd Style fixes 2010-07-21 13:04:04 -07:00
Guillermo Rauch
bb6164e30b Added helper method create() to view tests to get a server with the correct views directory Make the default scope for rendering the response Added tests for default scope and custom scope 2010-07-21 13:02:11 -07:00
Tj Holowaychuk
d3beae4871 Updated connect 2010-07-21 12:57:16 -07:00
Tj Holowaychuk
8df0df32f8 Blog example using the newly exposed app.route when mounted 2010-07-21 12:32:17 -07:00
Tj Holowaychuk
b0228dd0fd Refactored blog example 2010-07-21 12:16:58 -07:00
Tj Holowaychuk
ffca2dee1d Updated submodules 2010-07-21 12:14:00 -07:00
Tj Holowaychuk
cba985bfea res.render() using res.send() 2010-07-21 09:41:51 -07:00
Tj Holowaychuk
6a10a67205 Added resource example 2010-07-21 09:33:18 -07:00
Tj Holowaychuk
880fb5bd89 Revert "Removed make install-support"
This reverts commit bdfd81322b.
2010-07-20 22:11:00 -07:00
Tj Holowaychuk
6a0ade074d Updated docs 2010-07-20 16:34:47 -07:00
Tj Holowaychuk
6cf4629d0f Added Guillermo Rauch to the contributor list 2010-07-20 15:11:05 -07:00
Tj Holowaychuk
ce23e5fa9e Move menu up after scrolling. Closes #352 2010-07-20 15:04:27 -07:00
Tj Holowaychuk
d16fb838ca Updated connect submodule 2010-07-20 14:40:04 -07:00
Tj Holowaychuk
6b9eb8aae3 View helpers are now app specific. Closes #351 2010-07-20 14:22:54 -07:00
Tj Holowaychuk
78008d1fea Docs for Server#{helpers,dynamicHelpers}() 2010-07-20 14:02:38 -07:00
Tj Holowaychuk
69fb9bb39b Removed old view helpers test 2010-07-20 13:58:17 -07:00
Tj Holowaychuk
92f1557235 Renamed Server#helpers() to Server#dynamicHelpers() 2010-07-20 13:55:21 -07:00
Tj Holowaychuk
8e487ba36d Added assertions for dynamic helper params and scope 2010-07-20 13:48:30 -07:00
Tj Holowaychuk
7eb088b5ed Added app.helpers() docs 2010-07-20 13:45:57 -07:00
Tj Holowaychuk
9ef8ea95b0 Added dynamic view helper support. Closes #349
via app.helpers()
2010-07-20 13:40:29 -07:00
Tj Holowaychuk
eedf54b485 Added test for specific layouts with "view engine" set 2010-07-20 13:06:50 -07:00
Tj Holowaychuk
a461815957 Added support for passing of layout name without extension
Utilizes the child view ext
2010-07-20 12:56:08 -07:00
Tj Holowaychuk
687c2f08f6 Fixed express(1) expansion of public dirs. Closes #348
Should fix your issue, thanks!
2010-07-20 12:50:06 -07:00
Tj Holowaychuk
2294f23e5f Fixed connect links 2010-07-20 09:29:16 -07:00
Tj Holowaychuk
bdfd81322b Removed make install-support 2010-07-20 08:56:23 -07:00
Tj Holowaychuk
3ceb0de8d8 Updated curl install docs 2010-07-19 15:27:53 -07:00
Tj Holowaychuk
c4b5208867 Added view helper docs. Closes #344 2010-07-19 09:37:19 -07:00
Tj Holowaychuk
9c3f6b0c10 Merge branch 'fix-middleware' 2010-07-19 09:07:40 -07:00
Tj Holowaychuk
0550755c7d Fixed middleware precedence. Closes #345
The first call to app.{get,del,put,post}() will
stack the router middleware. This means config
can flow naturally BEFORE any routes
have been created, preventing breakage of
bodyDecoder etc
2010-07-19 09:07:35 -07:00
Tj Holowaychuk
47602f267a Added failing test 2010-07-19 08:40:42 -07:00
Tj Holowaychuk
656e67ef90 Cleaning up form example 2010-07-19 08:18:44 -07:00
Tj Holowaychuk
c53883b635 Docs for session example 2010-07-19 08:15:15 -07:00
Tj Holowaychuk
c4278c81f1 Added req.flash() to form example. Closes #338 2010-07-16 15:59:06 -07:00
Tj Holowaychuk
c94dcf5940 Merge branch 'sess' 2010-07-16 15:41:35 -07:00
Tj Holowaychuk
08ca3eff12 Added session example 2010-07-16 15:41:32 -07:00
Tj Holowaychuk
b40a241b2e Better blog partials 2010-07-16 13:34:35 -07:00
Tj Holowaychuk
f86f1e83ad Added partial tests for collection locals + passed locals 2010-07-16 12:55:05 -07:00
Tj Holowaychuk
be85701abe Added partial magic var docs. Closes #342 2010-07-16 12:51:56 -07:00
Tj Holowaychuk
190eb474a6 Refactored res.partial() 2010-07-16 12:48:34 -07:00
Tj Holowaychuk
8db1138081 Added support for "as" for non-collection partials. Closes #341 2010-07-16 12:42:05 -07:00
Tj Holowaychuk
afbfd4d3fa Merge branch 'blog' 2010-07-16 11:25:35 -07:00
Tj Holowaychuk
9b8efbfdd5 Added blog mounting example 2010-07-16 11:25:30 -07:00
Tj Holowaychuk
cacada87f3 Updated docs 2010-07-16 11:04:34 -07:00
Tj Holowaychuk
8a36c54318 Removed more use("/", ...)s 2010-07-16 11:03:45 -07:00
Tj Holowaychuk
879d411669 Removed app.use("/",...) from bin/express 2010-07-16 11:01:03 -07:00
Tj Holowaychuk
b38be2ce7b Updated connect submodule 2010-07-16 10:59:24 -07:00
Tj Holowaychuk
1810c9b61c Docs for "view engine" setting 2010-07-16 08:31:23 -07:00
Tj Holowaychuk
98737f14f1 Added "view engine" setting to jade example 2010-07-16 08:21:26 -07:00
Tj Holowaychuk
b311118a04 Removed testing docs from readme
View contrib guide on expressjs.com
2010-07-16 08:13:43 -07:00
Tj Holowaychuk
8a337f1faf Better docs for res.sendfile() 2010-07-16 08:03:20 -07:00
Tj Holowaychuk
dbc5bd4104 Added link to examples 2010-07-16 07:51:23 -07:00
Tj Holowaychuk
a9c3f566da Fixed migration typo 2010-07-16 07:45:22 -07:00
Tj Holowaychuk
6d9c9cd964 Removed pomo tasks 2010-07-16 07:44:42 -07:00
Tj Holowaychuk
25c8883e49 Cleaning up view docs 2010-07-16 07:44:05 -07:00
Tj Holowaychuk
793943fc2f In depth partial docs 2010-07-16 07:43:31 -07:00
Tj Holowaychuk
e98f86c540 Normalizing view context option to scope 2010-07-16 07:34:30 -07:00
Tj Holowaychuk
1c8ff48f92 More view docs 2010-07-16 07:33:33 -07:00
Tj Holowaychuk
1fb73e2211 Added test-cov docs to contrib guide 2010-07-16 07:23:56 -07:00
Tj Holowaychuk
5279ade0e7 Added more req.flash() tests 2010-07-16 07:21:10 -07:00
Tj Holowaychuk
984134fb9d Missing semicolon
OMggGG :)
2010-07-16 07:17:43 -07:00
Tj Holowaychuk
eb8f1f24b7 Merge remote branch 'aheckmann/beta-cacheView' into integration 2010-07-16 07:16:41 -07:00
Tj Holowaychuk
e49dc8bcfa Merge remote branch 'aheckmann/beta-exposeServer' into integration 2010-07-16 07:15:42 -07:00
Tj Holowaychuk
e742da24a7 Fixed doc typo 2010-07-16 07:11:08 -07:00
Aaron Heckmann
203b65475c watcher should read files async 2010-07-15 23:45:27 -04:00
Aaron Heckmann
576c5f4c9e expose Server 2010-07-15 23:17:48 -04:00
Tj Holowaychuk
d2434b5591 CNAME in wrong branch :) 2010-07-15 16:57:11 -07:00
Tj Holowaychuk
634c008fcd Added CNAME 2010-07-15 16:53:50 -07:00
Tj Holowaychuk
83f1ccb8ad Updated history some more 2010-07-15 16:45:11 -07:00
Tj Holowaychuk
cea401c513 More error handling docs 2010-07-15 16:41:37 -07:00
Tj Holowaychuk
6b54c1b6d4 listen in generated app 2010-07-15 16:25:25 -07:00
Tj Holowaychuk
193c4a953e Updated install docs 2010-07-15 16:20:32 -07:00
Tj Holowaychuk
d389134036 install.sh now installs connect as well 2010-07-15 16:19:31 -07:00
Tj Holowaychuk
d8b140e341 More install docs 2010-07-15 16:04:25 -07:00
Tj Holowaychuk
5931e1143b Updating install docs 2010-07-15 16:01:49 -07:00
Tj Holowaychuk
e6d0c4b79f Updated connect submodule 2010-07-15 15:56:22 -07:00
Tj Holowaychuk
44a4a18320 Removed version format test 2010-07-15 15:52:47 -07:00
Tj Holowaychuk
2f96506a6e Added more view docs 2010-07-15 15:49:25 -07:00
Tj Holowaychuk
f904606b32 Merge branch 'ejs' into connect 2010-07-15 15:38:12 -07:00
Tj Holowaychuk
99bb14680a Added ejs example 2010-07-15 15:38:08 -07:00
Tj Holowaychuk
83df3dda95 Started ejs example 2010-07-15 14:59:02 -07:00
Tj Holowaychuk
5e4d67209c Executable docs 2010-07-15 14:50:26 -07:00
Tj Holowaychuk
2798af1668 Updated history 2010-07-15 14:48:55 -07:00
Tj Holowaychuk
f0e41ce4c7 Bump to 1.0.0beta 2010-07-15 14:44:37 -07:00
Tj Holowaychuk
300602dd32 Contrib middleware link 2010-07-15 14:38:44 -07:00
Tj Holowaychuk
136f6778e2 Tasks 2010-07-15 14:36:24 -07:00
Tj Holowaychuk
2fa7907054 Unix domain socket docs 2010-07-15 13:49:11 -07:00
Tj Holowaychuk
f3803c4c22 Server#listen() docs 2010-07-15 13:46:42 -07:00
Tj Holowaychuk
5d37927b0a More docs 2010-07-15 13:39:57 -07:00
Tj Holowaychuk
6227f5cfa2 More error docs 2010-07-15 13:30:43 -07:00
Tj Holowaychuk
9fbb9fa5e1 Error handling docs 2010-07-15 13:29:50 -07:00
Tj Holowaychuk
de81ee7ee6 More docs 2010-07-15 13:24:43 -07:00
Tj Holowaychuk
5fcf971e28 Fixed reload views example 2010-07-15 13:10:00 -07:00
Tj Holowaychuk
492f70fc4b Merge branch 'docs' into connect 2010-07-15 13:09:00 -07:00
Tj Holowaychuk
3ced7b7212 No underlines for FF 2010-07-15 13:08:34 -07:00
Tj Holowaychuk
7b55867ea7 Misc styling 2010-07-15 13:06:56 -07:00
Tj Holowaychuk
3e15ef1c86 Setting up TOC 2010-07-15 12:49:57 -07:00
Tj Holowaychuk
0cdc836054 Generating TOC 2010-07-15 12:06:54 -07:00
Tj Holowaychuk
1aad62b95d Docs 2010-07-15 11:11:05 -07:00
Tj Holowaychuk
ed1c88920e Tasks 2010-07-15 11:08:17 -07:00
Tj Holowaychuk
e6ca20c4a2 Added views / reload views settings to bin/express app 2010-07-15 11:07:56 -07:00
Tj Holowaychuk
cfa3470df6 Tasks 2010-07-15 11:02:03 -07:00
Tj Holowaychuk
479f297cf6 Improved pages demo 2010-07-15 10:55:45 -07:00
Tj Holowaychuk
7e1b222f90 Fixed pages app example 2010-07-15 10:52:38 -07:00
Tj Holowaychuk
69baa6ea1a Regenerated api docs 2010-07-15 10:44:47 -07:00
Tj Holowaychuk
0fce93be37 Removed connect.redirect() 2010-07-15 08:56:51 -07:00
Tj Holowaychuk
51611ec2bb Added test for multiple app.error() calls 2010-07-14 17:36:16 -07:00
Tj Holowaychuk
228a78136d Server#error() no longer requires arity of 4 2010-07-14 17:25:25 -07:00
Tj Holowaychuk
34d10ace7a Added test to confirm app.error() works with thrown exceptions 2010-07-14 17:19:40 -07:00
Tj Holowaychuk
57bd0a5628 Tasks 2010-07-14 17:16:18 -07:00
Tj Holowaychuk
42e4860855 Tasks 2010-07-14 17:12:14 -07:00
Tj Holowaychuk
ea1c9f70d7 Merge branch 'pages' into connect 2010-07-14 17:09:21 -07:00
Tj Holowaychuk
d3085b0450 Added custom pages example 2010-07-14 17:09:17 -07:00
Tj Holowaychuk
63d02f1d5f Install docs 2010-07-14 16:27:50 -07:00
Tj Holowaychuk
dfecbe5bfa More docs 2010-07-14 16:15:00 -07:00
Tj Holowaychuk
bcf9f00de5 Added install.sh 2010-07-14 16:06:07 -07:00
Tj Holowaychuk
a8e8e35678 Removed seed.yml 2010-07-14 15:59:26 -07:00
Tj Holowaychuk
2ec4a8b4ce Test prefixes 2010-07-14 15:50:40 -07:00
Tj Holowaychuk
6c3d3dee81 Tasks 2010-07-14 15:49:36 -07:00
Tj Holowaychuk
40b3116ed7 Tasks 2010-07-14 15:44:13 -07:00
Tj Holowaychuk
df7582b138 Tasks 2010-07-14 15:30:46 -07:00
Tj Holowaychuk
b08dab9aa1 Docs for new res methods 2010-07-14 15:29:18 -07:00
Tj Holowaychuk
da5a4804df Added res.download() 2010-07-14 15:15:25 -07:00
Tj Holowaychuk
d12f43498e Merge branch 'sendfile' into connect 2010-07-14 15:06:45 -07:00
Tj Holowaychuk
f9f2facd76 Added res.sendfile() 2010-07-14 15:06:41 -07:00
Tj Holowaychuk
eaee3954c1 Tasks 2010-07-14 14:48:43 -07:00
Tj Holowaychuk
eb235e11b6 Docs for res.attachment() 2010-07-14 14:45:30 -07:00
Tj Holowaychuk
0c5fe61ed3 More docs :) 2010-07-14 14:42:44 -07:00
Tj Holowaychuk
76052b443a By default a Buffer passed through res.send() is application/octet-stream 2010-07-14 14:38:29 -07:00
Tj Holowaychuk
5a48248e1e Docs for res.send() 2010-07-14 14:36:29 -07:00
Tj Holowaychuk
bedff3278f More docs 2010-07-14 14:30:51 -07:00
Tj Holowaychuk
0bb48153a5 Added dynamic redirect mapping 2010-07-14 14:17:48 -07:00
Tj Holowaychuk
b75246e3ca Added app.redirect(key, url) 2010-07-14 14:03:30 -07:00
Tj Holowaychuk
2d31f0d7fe res.redirect() docs 2010-07-14 13:59:26 -07:00
Tj Holowaychuk
87cfca721e Merge branch 'redirect' into connect 2010-07-14 13:49:59 -07:00
Tj Holowaychuk
54d36f3337 Removed traces of connect.redirect() 2010-07-14 13:49:51 -07:00
Tj Holowaychuk
a4a17d171a Added custom redirect map support 2010-07-14 13:37:30 -07:00
Tj Holowaychuk
7c2673fc66 Added tests for res.redirect() 2010-07-14 13:29:39 -07:00
Tj Holowaychuk
c77ecbb10f Started ServerResponse#redirect() 2010-07-14 13:17:39 -07:00
Tj Holowaychuk
f0ba57ba23 Added contrib docs 2010-07-14 12:06:56 -07:00
Tj Holowaychuk
893aa80361 Added link to user account for github example 2010-07-14 11:40:58 -07:00
Tj Holowaychuk
59ac3d1d45 Merge branch 'github' into connect 2010-07-14 11:36:38 -07:00
Tj Holowaychuk
247a9478c8 Finished github example 2010-07-14 11:36:32 -07:00
Tj Holowaychuk
1c64d858c2 Added total watchers 2010-07-14 11:23:39 -07:00
Tj Holowaychuk
91a1d7faaf Sorting github repos 2010-07-14 11:19:57 -07:00
Tj Holowaychuk
214bbfa7b6 Simplified github example 2010-07-14 11:15:18 -07:00
Tj Holowaychuk
3ee4492b3c Started github example 2010-07-14 11:11:14 -07:00
Tj Holowaychuk
38c453b3c6 More migration docs 2010-07-14 10:49:23 -07:00
Tj Holowaychuk
3d41c61991 Updated docs 2010-07-14 10:23:43 -07:00
Tj Holowaychuk
1f9f47f97e Readme 2010-07-14 10:18:12 -07:00
Tj Holowaychuk
41cc2923b1 Updated multipart example 2010-07-14 09:34:38 -07:00
Tj Holowaychuk
4c180f3eed Added connect-form submodule 2010-07-14 08:59:34 -07:00
Tj Holowaychuk
5f9a64dbea Redirecting in multipart example 2010-07-14 08:49:20 -07:00
Tj Holowaychuk
9d37bfdcf1 listen() in examples 2010-07-14 08:43:23 -07:00
Tj Holowaychuk
d738c3aca6 Added methodOverride to generated app 2010-07-13 11:32:37 -07:00
Tj Holowaychuk
836c4313ab Tasks 2010-07-13 11:31:21 -07:00
Tj Holowaychuk
91c6478add Updated submodules 2010-07-13 11:29:19 -07:00
Tj Holowaychuk
fce527a55b Added progress to multipart example 2010-07-13 10:07:41 -07:00
Tj Holowaychuk
9a1f62fc1f Added multipart example 2010-07-13 09:48:33 -07:00
Tj Holowaychuk
018d8656d3 Added form example 2010-07-13 09:37:39 -07:00
Tj Holowaychuk
2636e1ba45 Added app.error() support 2010-07-13 09:09:10 -07:00
Tj Holowaychuk
caed07dfc1 Added exception example 2010-07-13 08:48:44 -07:00
Tj Holowaychuk
373cf3328d Added test to confirm set() is chainable 2010-07-13 08:36:56 -07:00
Tj Holowaychuk
0370c3fa01 configure() is chainable 2010-07-13 08:36:22 -07:00
Tj Holowaychuk
f5143a7d63 Added test to confirm that configure() callbacks execute in context to the server 2010-07-13 08:35:22 -07:00
Tj Holowaychuk
346b2a27cb Removed annoying padding transition 2010-07-12 17:46:26 -07:00
Tj Holowaychuk
38281e6361 Added more setting docs 2010-07-12 17:43:01 -07:00
Tj Holowaychuk
6e8413f568 Moved config docs up 2010-07-12 17:39:14 -07:00
Tj Holowaychuk
cb04364381 Configuration docs 2010-07-12 17:37:26 -07:00
Tj Holowaychuk
83d2555123 Added configuration section 2010-07-12 17:32:07 -07:00
Tj Holowaychuk
0ace97c8d4 Route passing docs 2010-07-12 17:09:52 -07:00
Tj Holowaychuk
9e3a0c61b8 Started guide 2010-07-12 17:06:35 -07:00
Tj Holowaychuk
2fda5c7873 Fixed banner 2010-07-12 16:47:30 -07:00
Tj Holowaychuk
e29868c8ce Added some links 2010-07-12 16:44:53 -07:00
Tj Holowaychuk
ac560be870 Added menu to docs 2010-07-12 16:42:11 -07:00
Tj Holowaychuk
5a29cbf4a7 Better hello world example 2010-07-12 16:36:01 -07:00
Tj Holowaychuk
dc77894f68 Migration docs for req.param() 2010-07-12 16:32:43 -07:00
Tj Holowaychuk
74432a6b9d Added redirect migration docs 2010-07-12 16:29:53 -07:00
Tj Holowaychuk
2b2fa7e77c Absolute labs banner 2010-07-12 16:23:16 -07:00
Tj Holowaychuk
c3f71b33aa Removed backticks from docs 2010-07-12 16:17:40 -07:00
Tj Holowaychuk
927aae72d1 Docs for plugins vs middleware 2010-07-12 16:15:53 -07:00
Tj Holowaychuk
2a674f4e8d Added partial migration docs 2010-07-12 16:07:03 -07:00
Tj Holowaychuk
0b86ce2bda Added view rendering migration section 2010-07-12 15:58:54 -07:00
Tj Holowaychuk
548a0709f4 Control passing docs 2010-07-12 15:47:09 -07:00
Tj Holowaychuk
da84c0bb4d Migration docs for params 2010-07-12 15:42:38 -07:00
Tj Holowaychuk
9e68a5b9ab Started migration docs 2010-07-12 15:28:46 -07:00
Tj Holowaychuk
6982bdaa28 Updated expresso submodule 2010-07-12 14:55:32 -07:00
Tj Holowaychuk
c1809232fe Merge branch 'flash' into connect 2010-07-12 14:55:19 -07:00
Tj Holowaychuk
3c06c82eb7 Added tests for req.flash() 2010-07-12 14:55:14 -07:00
Tj Holowaychuk
1bcccb3134 Added req.flash() 2010-07-12 14:14:50 -07:00
Tj Holowaychuk
cdf49dc87e Removed a utils.merge() call 2010-07-12 11:35:07 -07:00
Tj Holowaychuk
0a0fb8f803 Updated expresso submodule 2010-07-09 16:41:38 -07:00
Tj Holowaychuk
60cfd56369 Regenerated docs 2010-07-09 15:32:13 -07:00
Tj Holowaychuk
73050d38c5 Added make install-docs 2010-07-09 15:31:05 -07:00
Tj Holowaychuk
c50e941972 Tasks 2010-07-09 15:28:51 -07:00
Tj Holowaychuk
7c59fd21e2 Fixed package.json 2010-07-09 13:56:07 -07:00
Tj Holowaychuk
b095a4221c Added ejs submodule 2010-07-09 13:19:37 -07:00
Tj Holowaychuk
1ef39fa3b8 Updated Connect submodule 2010-07-09 10:53:57 -07:00
Tj Holowaychuk
fcf4530d83 Tasks 2010-07-08 14:59:57 -07:00
Tj Holowaychuk
0515e14d27 Added make test-cov 2010-07-08 14:49:13 -07:00
Tj Holowaychuk
ddbef0bd79 Merge branch 'view-helpers' into connect 2010-07-08 14:47:21 -07:00
Tj Holowaychuk
bc5d31f86a Added view helper support 2010-07-08 14:47:13 -07:00
Tj Holowaychuk
09147a2aab Regenerated docs 2010-07-08 14:33:54 -07:00
Tj Holowaychuk
a75a119e2f Added default view engine support
Now app.set("view engine", "jade") allows you to
res.render("jade")
2010-07-08 14:31:27 -07:00
Tj Holowaychuk
c1b3546161 More example docs 2010-07-08 14:07:05 -07:00
Tj Holowaychuk
8338432c7b Added app generation to bin/express 2010-07-08 14:01:56 -07:00
Tj Holowaychuk
8beae065cf Added view callback error test 2010-07-08 13:17:30 -07:00
Tj Holowaychuk
0e7d39aa13 Added invalid view test 2010-07-08 13:16:36 -07:00
Tj Holowaychuk
74063ad735 Tasks 2010-07-08 13:10:53 -07:00
Tj Holowaychuk
55a29808c9 Added view callback test 2010-07-08 13:09:15 -07:00
Tj Holowaychuk
40f3de3939 Merge branch 'view-reloading' into connect 2010-07-08 13:04:50 -07:00
Tj Holowaychuk
5d94ab09e3 Updated jade submodule 2010-07-08 13:04:21 -07:00
Tj Holowaychuk
b34ff6853d Renamed setting to "reload views" 2010-07-08 12:45:03 -07:00
Tj Holowaychuk
e2570be957 Added view reloading 2010-07-08 12:38:16 -07:00
Tj Holowaychuk
95e6fff3da Added another example 2010-07-08 11:49:12 -07:00
Tj Holowaychuk
9de12b7385 Tasks 2010-07-08 11:33:39 -07:00
Tj Holowaychuk
beffe906e4 ws 2010-07-08 11:12:42 -07:00
Tj Holowaychuk
e850d1073d Partials without extensions use the same extension as the parent view 2010-07-08 11:01:20 -07:00
Tj Holowaychuk
c02a2ba5ba Exposing __filename as a local for views 2010-07-08 10:49:46 -07:00
Tj Holowaychuk
f92bb6690b Todo 2010-07-08 10:40:46 -07:00
Tj Holowaychuk
5842a3bba6 Added test for non-collection partial support 2010-07-08 10:38:30 -07:00
Tj Holowaychuk
fcf691d97c Added view test for magic locals 2010-07-08 10:27:23 -07:00
Tj Holowaychuk
a32c7d5f07 Added as: global support 2010-07-08 10:24:12 -07:00
Tj Holowaychuk
edfb18b75a Added as: this support 2010-07-08 10:17:11 -07:00
Tj Holowaychuk
5544c5d5d4 Added collection "as" option test 2010-07-08 10:13:24 -07:00
Tj Holowaychuk
22100f7c3a Added support for partial(view, array) as collection 2010-07-08 10:09:03 -07:00
Tj Holowaychuk
8ece01ccda Fixed partial support 2010-07-08 09:56:03 -07:00
Tj Holowaychuk
9b68039a62 Caching view contents 2010-07-08 09:53:34 -07:00
Tj Holowaychuk
a914326e75 todo 2010-07-08 09:49:13 -07:00
Tj Holowaychuk
2b7dd35e05 Todo 2010-07-08 09:36:59 -07:00
Tj Holowaychuk
15e41169ad Added bin/express to package.json 2010-07-08 09:25:43 -07:00
Tj Holowaychuk
f8c5219c12 Updated jade submodule 2010-07-08 09:23:37 -07:00
Tj Holowaychuk
c570b67dda Updated jade submodule 2010-07-08 09:16:57 -07:00
Tj Holowaychuk
456fac1700 Tasks 2010-07-08 07:43:17 -07:00
Tj Holowaychuk
41e58c394b Updated tasks 2010-07-07 17:16:18 -07:00
Tj Holowaychuk
5aeda5f67b Added .pomo
Used with my ruby "pomo" executable, for managing tasks
2010-07-07 17:15:36 -07:00
Tj Holowaychuk
c96adf168c Added ./index.js
For super easy git installs
2010-07-07 17:13:49 -07:00
Tj Holowaychuk
40c5bc01ff Docs 2010-07-07 17:08:07 -07:00
Tj Holowaychuk
09dabef70c Updated docs 2010-07-07 17:03:23 -07:00
Tj Holowaychuk
96edee806e req.param() docs 2010-07-07 17:03:13 -07:00
Tj Holowaychuk
e58f4683d1 Finished req.accepts() 2010-07-07 17:00:23 -07:00
Tj Holowaychuk
9750817bf0 Added more tests for req.accepts() 2010-07-07 16:44:42 -07:00
Tj Holowaychuk
7099d730e6 Docs for req.accepts() 2010-07-07 16:41:07 -07:00
Tj Holowaychuk
13c290e99f Docs for req.accepts() 2010-07-07 16:40:29 -07:00
Tj Holowaychuk
cf37966e39 Added req.accepts() 2010-07-07 16:38:23 -07:00
Tj Holowaychuk
9449c4b9b5 Merge branch 'params' into connect 2010-07-07 16:05:43 -07:00
Tj Holowaychuk
046172e5d9 Added req.param() POST support via connect.bodyDecoder() 2010-07-07 16:05:32 -07:00
Tj Holowaychuk
c74446e38c Added req.param() 2010-07-07 15:54:25 -07:00
Tj Holowaychuk
7897460993 Added req.header() tests 2010-07-07 15:38:06 -07:00
Tj Holowaychuk
4b59583bca Docs 2010-07-07 15:34:46 -07:00
Tj Holowaychuk
41f73559f2 Setting res.render() cache to true in production 2010-07-07 15:21:21 -07:00
Tj Holowaychuk
d3090c0965 Added option docs to res.render() 2010-07-07 15:17:48 -07:00
Tj Holowaychuk
dc5caebbf8 Added haml test 2010-07-07 15:10:16 -07:00
Tj Holowaychuk
14280dfedb Added buffer support to res.send() 2010-07-07 14:54:23 -07:00
Tj Holowaychuk
8fdf11135a Added res.attachment() 2010-07-07 14:45:45 -07:00
Tj Holowaychuk
c8baa8f349 Added res.send() Content-Type precedence test 2010-07-07 14:38:41 -07:00
Tj Holowaychuk
a6e25b46af Added res.send() examples 2010-07-07 14:29:18 -07:00
Tj Holowaychuk
395d14ab58 Allowing status as first or second arg to res.send() 2010-07-07 14:25:06 -07:00
Tj Holowaychuk
0d4b57df7a req.send() headers take precedence 2010-07-07 14:11:00 -07:00
Tj Holowaychuk
416e7617b3 res.contentType() using res.header() 2010-07-07 14:02:55 -07:00
Tj Holowaychuk
838c470017 Added res.header() 2010-07-07 14:02:16 -07:00
Tj Holowaychuk
f0a09665db res.send() only setting Content-Type when not already present 2010-07-07 13:57:56 -07:00
Tj Holowaychuk
1397fa64d5 Added req.header(name, defaultValue) 2010-07-07 13:33:21 -07:00
Tj Holowaychuk
ac17a6afcf Added res.contentType() tests 2010-07-07 13:32:16 -07:00
Tj Holowaychuk
35af1bab30 Added req.xhr as alias of req.isXMLHttpRequest 2010-07-07 13:22:59 -07:00
Tj Holowaychuk
1fe7bb271a Added req.isXMLHttpRequest 2010-07-07 13:21:07 -07:00
Tj Holowaychuk
774e25d944 Added make install-support and make uninstall-support 2010-07-07 13:06:41 -07:00
Tj Holowaychuk
6770e8541d Added `make install 2010-07-07 13:05:21 -07:00
Tj Holowaychuk
70e94e4dde Updated connect submodule 2010-07-07 12:54:28 -07:00
Tj Holowaychuk
0ffbc6e345 Added jade submodule 2010-07-07 12:43:48 -07:00
Tj Holowaychuk
25e796753f Added Connect submodule 2010-07-07 12:43:01 -07:00
Tj Holowaychuk
70d9ef4f77 Added test for next()ing 2010-07-07 11:56:37 -07:00
Tj Holowaychuk
fd67c9a589 Exposing req / res to each other 2010-07-07 11:52:18 -07:00
Tj Holowaychuk
f0917ff774 Ignore pids 2010-07-07 07:49:40 -07:00
Tj Holowaychuk
843281dec0 Added hello-world example
run with:
    connect -C examples/helloworld
2010-07-07 07:49:01 -07:00
Tj Holowaychuk
3a21588429 Docs :) 2010-07-07 07:35:57 -07:00
Tj Holowaychuk
21eeb09a3c Executable docs 2010-07-06 20:31:52 -07:00
Tj Holowaychuk
900c5ed358 More docs 2010-07-06 19:46:48 -07:00
Tj Holowaychuk
195c8a92d1 Added contributors back to docs 2010-07-06 19:42:06 -07:00
Tj Holowaychuk
7c651e6093 More styling
gahh!!
2010-07-06 17:10:59 -07:00
Tj Holowaychuk
860b899f0c Added images back to docs 2010-07-06 17:06:39 -07:00
Tj Holowaychuk
87b7524de9 More doc styling 2010-07-06 17:01:04 -07:00
Tj Holowaychuk
29641ae16a Started new docs 2010-07-06 16:56:42 -07:00
Tj Holowaychuk
02e32a7a9d App generation in bin/express 2010-07-06 08:17:35 -07:00
Tj Holowaychuk
3056369c6e Started bin/express 2010-07-06 08:06:39 -07:00
Tj Holowaychuk
3da75726d3 Error handling for views 2010-07-06 07:53:18 -07:00
Tj Holowaychuk
b7346de47d Fixed partials 2010-07-06 07:07:56 -07:00
Tj Holowaychuk
7a69100b2f Updated copyright 2010-07-06 06:53:13 -07:00
Tj Holowaychuk
2732d2b9d3 Updated docs 2010-07-06 06:52:48 -07:00
Tj Holowaychuk
87bb27cc4f Added migrate doc files
yet to be filled with copy :)
2010-07-05 21:56:58 -07:00
Tj Holowaychuk
bafa300b0f Generated docs 2010-07-05 21:52:49 -07:00
Tj Holowaychuk
939cf4542f Added make docs 2010-07-05 21:47:37 -07:00
Tj Holowaychuk
874975da54 Added response helpers 2010-07-05 21:37:56 -07:00
Tj Holowaychuk
f0bebd4c33 Docs 2010-07-05 16:58:07 -07:00
Tj Holowaychuk
c444a11862 Todo 2010-07-05 16:55:16 -07:00
Tj Holowaychuk
4c0704e338 Started implementing partials again 2010-07-05 16:50:37 -07:00
Tj Holowaychuk
77f4cd5d58 Refactord ServerResponse#render() 2010-07-05 16:30:55 -07:00
Tj Holowaychuk
9858d3c5a8 Refactord ServerResponse#render() 2010-07-05 16:30:21 -07:00
Tj Holowaychuk
414acbc9ec Added layout support 2010-07-05 16:29:39 -07:00
Tj Holowaychuk
21f904db42 Started ServerResponse#render() 2010-07-05 16:14:34 -07:00
Tj Holowaychuk
f6ca253849 Applying arguments from createServer() 2010-07-05 15:54:35 -07:00
Tj Holowaychuk
3f989191e3 Added failing constructor middleware test 2010-07-05 15:49:38 -07:00
Tj Holowaychuk
2bea014e89 Added middleware usage test 2010-07-05 15:43:10 -07:00
Tj Holowaychuk
84fc19a75f Docs 2010-07-05 15:33:56 -07:00
Tj Holowaychuk
d803924ef0 Added Server#{set,enable,disable}() and friends 2010-07-05 15:32:54 -07:00
Tj Holowaychuk
889f8d9d30 Added server.js 2010-07-05 15:13:32 -07:00
Tj Holowaychuk
1dcb7eaf1f . 2010-07-05 15:13:19 -07:00
Tj Holowaychuk
5f9e4ace2f Added basic app test 2010-07-05 15:02:25 -07:00
Tj Holowaychuk
6386330973 Started tests 2010-07-05 14:58:38 -07:00
Tj Holowaychuk
fd89b9755e Removed benchmarks 2010-07-05 14:52:19 -07:00
Tj Holowaychuk
730f454278 Removed examples 2010-07-05 14:51:53 -07:00
Tj Holowaychuk
e2fca29c91 Cleared out makefile 2010-07-05 14:51:45 -07:00
Tj Holowaychuk
f97a222cf5 Removed specs 2010-07-05 14:50:39 -07:00
Tj Holowaychuk
c75105e977 Added expresso submodule 2010-07-05 14:50:21 -07:00
Tj Holowaychuk
7096471d65 Removed submodules 2010-07-05 14:49:57 -07:00
Tj Holowaychuk
cc1cee8a38 Auto-requiring ./view.js 2010-06-19 22:25:10 -07:00
Tj Holowaychuk
5f2680889f Added application.js 2010-06-19 22:18:35 -07:00
Tj Holowaychuk
b3ae8bb606 Added Application#runConfig() 2010-06-19 22:07:18 -07:00
Tj Holowaychuk
72d9f37845 Added Application#{set,enable,disable}() 2010-06-19 21:39:36 -07:00
Tj Holowaychuk
fdfccafd84 Fixed another typo 2010-06-19 21:35:16 -07:00
Tj Holowaychuk
a784f946ba Fixed ternary typo 2010-06-19 21:34:12 -07:00
Tj Holowaychuk
a04af6c4bd Started re-write of views 2010-06-19 21:33:29 -07:00
Tj Holowaychuk
64b24a96c8 Fixing chat example 2010-06-18 17:30:20 -07:00
Tj Holowaychuk
a62a5d0d7b Removed old cruft
wow express is light now! haha.. go connect go
2010-06-18 17:16:17 -07:00
Tj Holowaychuk
3043d1e839 Hello world working (somewhat) 2010-06-18 17:00:07 -07:00
Tj Holowaychuk
a3aefb6902 Removed spec crap
not a good fit for async
2010-06-18 16:23:08 -07:00
Tj Holowaychuk
a42aaa270c Removed lib/support
you will all have to install these via kiwi or npm etc,
bundling is no more! (at least for now)
2010-06-18 16:22:48 -07:00
Tj Holowaychuk
f8b471c17b Started the destruction :) 2010-06-18 16:21:16 -07:00
Tj Holowaychuk
87adff44db Added connect submodule 2010-06-18 16:15:52 -07:00
isaacs
767bba9c04 s/parseQuery/parse/g (The node querystring module changed recently) 2010-06-16 00:54:19 -07:00
Tj Holowaychuk
0c827521d0 Added npm install docs 2010-06-15 14:25:20 -07:00
Tj Holowaychuk
80cec7d12f Release 0.14.0 2010-06-15 14:22:51 -07:00
Tj Holowaychuk
5f916357e9 Make Express npm friendly
Since wayyy back in the early days of node we did
not have relative require :)
2010-06-15 14:14:40 -07:00
Tj Holowaychuk
ea82eea9bb Misc package.json updates 2010-06-15 13:50:17 -07:00
Aaron Heckmann
22222d7db4 update node version 2010-06-14 01:54:34 -04:00
Aaron Heckmann
cebee369d1 add ciaran 2010-06-13 19:59:39 -04:00
Aaron Heckmann
faf809851c add contributors 2010-06-10 21:21:32 -04:00
Aaron Heckmann
d05aafd76b use plugin option instead of global set() 2010-06-10 20:21:52 -04:00
visionmedia
8d52721873 Removed bufferSize from static benchmarks 2010-06-10 11:09:26 -07:00
visionmedia
66c6152cd2 Merge remote branch 'aheckmann/staticbuffersize' 2010-06-10 11:08:40 -07:00
Aaron Heckmann
32cd51d3a5 add 'static buffer size' setting 2010-06-09 21:19:02 -04:00
Aaron Heckmann
497a28401e cache view and partial subdirectories 2010-06-09 08:04:45 -07:00
visionmedia
e46912047c Updated haml submodule 2010-06-08 05:44:54 -07:00
visionmedia
56b573ede5 Updated class submodule 2010-06-04 11:07:38 -07:00
visionmedia
0276be1789 Updated haml submodule 2010-06-04 11:05:47 -07:00
visionmedia
7db4c60fc3 Removed old release details link
Not really relevant anymore. (but really im just testing
my new CI server haha :D )
2010-06-03 16:39:43 -07:00
visionmedia
95cc01dd91 Added missing file comment 2010-06-03 16:36:11 -07:00
visionmedia
cce1dddf42 Added author to package.json
Guys feel free to add yourself as contributors in there :)
2010-06-03 16:31:08 -07:00
visionmedia
0938b57841 Removed bin/express
for now :) maybe it will come back some day when it is
more useful
2010-06-03 16:25:50 -07:00
visionmedia
aef8550e2f Removed old todo comment 2010-06-03 16:22:45 -07:00
visionmedia
71bf0bde32 Readme typo 2010-06-03 16:18:59 -07:00
visionmedia
750623b9b1 Fixed mime.type() comments now that ".ext" is not supported 2010-06-03 16:15:32 -07:00
visionmedia
1f12c53b65 Added Connect port notice 2010-06-03 16:04:36 -07:00
visionmedia
8717ea1b95 Updated seed.yml 2010-06-01 08:49:21 -07:00
visionmedia
db2eb658ca Release 0.13.0 2010-06-01 08:49:04 -07:00
visionmedia
70483484ce Fixed upload example 2010-06-01 08:44:26 -07:00
visionmedia
d21afc43a1 Merge branch 'charset' of git://github.com/aheckmann/express 2010-05-31 14:06:29 -07:00
visionmedia
7ad0803f2e Updated package.json 2010-05-31 14:05:15 -07:00
Aaron Heckmann
ec4bfd55f9 not-found exceptions using utf-8 2010-05-31 12:58:53 -04:00
Aaron Heckmann
f65174a0db show-exceptions uses utf-8 2010-05-31 12:56:30 -04:00
visionmedia
8b1fcd4dd7 mime.type() no longer accepts ".type" 2010-05-30 13:14:08 -07:00
visionmedia
9509237958 Fixed mime.type() due to path.extname() changes 2010-05-30 13:04:35 -07:00
visionmedia
f20fd20a06 Fixed view support due to fs.readFile Buffers 2010-05-30 12:46:15 -07:00
visionmedia
8e48120fb7 Updated JSpec 2010-05-30 12:42:31 -07:00
visionmedia
44cc5ac883 Updated haml submodule 2010-05-27 15:32:30 -07:00
visionmedia
9a43cc8c4b Updated haml submodule 2010-05-25 16:08:50 -07:00
visionmedia
8dfc0d54f4 Updated haml submodule 2010-05-25 13:49:30 -07:00
visionmedia
77febd21de Fixed code styling 2010-05-23 09:38:42 -07:00
Aaron Heckmann
84a997c66b Added support for deleting cookies via Request#cookie('key', null) 2010-05-23 09:37:53 -07:00
Aaron Heckmann
b900a59fc2 respond(204) should not have a body 2010-05-22 12:13:15 -04:00
visionmedia
ca782dbc58 Release 0.12.0 2010-05-22 08:24:22 -07:00
visionmedia
746cda27ec Fixed cookie spec urlencoding 2010-05-22 08:23:28 -07:00
visionmedia
16d1651656 Fixed a cookie spec 2010-05-22 08:22:01 -07:00
visionmedia
4735fb2377 Merge branch 'master' of git://github.com/tritonrc/express 2010-05-22 08:21:08 -07:00
Aaron Heckmann
ec6b518fd2 compatible with node v0.1.96 2010-05-22 08:09:09 -07:00
Brian McKinney
580ad1b192 Make sure to URL encode cookie name and value on response if we are going to URL decode on request 2010-05-18 18:53:01 -06:00
visionmedia
23d8810486 Updated haml submodule 2010-05-17 15:43:38 -07:00
visionmedia
d579d62eb6 Comment changed to match others 2010-05-14 07:30:14 -07:00
visionmedia
529f785e3c Merge branch 'master' of git://github.com/Guille/express 2010-05-14 07:28:53 -07:00
Guillermo Rauch
0581ae87b4 Renaming Globals to helpers (I'm sold) 2010-05-14 11:16:51 -03:00
visionmedia
cda1059336 Updated readme, we are compatible with node --version v0.1.95 2010-05-14 06:51:59 -07:00
Aaron Heckmann
1aed6b5c30 Merge branch 'master' into encoding 2010-05-14 08:05:46 -04:00
Aaron Heckmann
4e68705b24 compatible with node v0.1.95 2010-05-14 08:01:05 -04:00
Guillermo Rauch
216cb1ea12 Added support for globals (eg: helpers) in views
- Added export.Globals in plugins/view.js
 - Added two specs (one for a simple template, one for a template with a layout) with a dummy i18n helper
 - Updated README features list
2010-05-13 20:35:25 -03:00
Guillermo Rauch
8ef6a0b432 Merge branch 'master' of http://github.com/visionmedia/express
* 'master' of http://github.com/visionmedia/express: (168 commits)
  Updated haml submodule
  s/==/===/
  Misc refactoring to make parseCookie() more readable / spec for overriding keys
  s/QueryString/queryString/
  Added spec for malformed cookies
  regexps have no "n" flag
  No need to quote key in spec
  Fixed LF -> CRLF for setting multiple cookies
  Redo cookies parsing to accept quoted values and url escaped cookies
  Remove inode from ETag, modified time only
  Release 0.11.0
  Works fine with node --version v0.1.94
  Refactoring some spec fixtures
  Fixing spec for EJS partial
  Updated ext
  Updated haml
  Added spec / refactored layout of different engine support
  Added spec for layouts with different engines
  Fixing EJS partial support by passing along the context. Issue #307
  Allow layouts to use different engines
  ...

Conflicts:
	lib/express/core.js
2010-05-13 18:53:11 -03:00
visionmedia
5dc152c46e Updated haml submodule 2010-05-11 13:22:32 -07:00
visionmedia
c3a21437e4 Merge branch 'integration' 2010-05-11 07:57:50 -07:00
visionmedia
32bc8dcbf9 s/==/===/ 2010-05-11 07:57:24 -07:00
visionmedia
677ca7b4aa Misc refactoring to make parseCookie() more readable / spec for overriding keys 2010-05-11 07:55:15 -07:00
visionmedia
dfc2331104 s/QueryString/queryString/ 2010-05-11 07:47:20 -07:00
visionmedia
cd06bbfb8d Added spec for malformed cookies 2010-05-11 07:46:44 -07:00
visionmedia
1d596bcbac regexps have no "n" flag 2010-05-11 07:44:31 -07:00
visionmedia
0cb7b9c13d No need to quote key in spec 2010-05-11 07:42:23 -07:00
visionmedia
a180efeca7 Merge branch 'master' of git://github.com/tritonrc/express into integration 2010-05-11 07:41:15 -07:00
visionmedia
eef24ea29c Fixed LF -> CRLF for setting multiple cookies 2010-05-11 07:25:08 -07:00
Brian McKinney
458bb3d7f7 Redo cookies parsing to accept quoted values and url escaped cookies 2010-05-10 17:18:42 -06:00
visionmedia
ffb23d92c0 Remove inode from ETag, modified time only 2010-05-07 13:52:13 -07:00
visionmedia
0ce39a4cf6 Release 0.11.0 2010-05-06 15:41:15 -07:00
visionmedia
a24c70e490 Works fine with node --version v0.1.94 2010-05-06 15:36:06 -07:00
visionmedia
8d4ef6e883 Merge branch 'integration' 2010-05-06 15:35:39 -07:00
visionmedia
54865ebdee Refactoring some spec fixtures 2010-05-06 15:24:30 -07:00
visionmedia
cb8e704d5c Merged bdotdub/master 2010-05-06 15:21:47 -07:00
Benny Wong
57f4978442 Fixing spec for EJS partial
* Had to use double quote and not single quote for the partial filename
* Couldn't get each to work. Using ugly `for` for now
2010-05-06 13:59:50 -04:00
visionmedia
b8833f4c9e Updated ext 2010-05-06 10:29:15 -07:00
visionmedia
5c40cbc675 Merge branch 'update-haml' 2010-05-06 09:17:13 -07:00
visionmedia
a455dcc919 Updated haml 2010-05-06 09:17:08 -07:00
visionmedia
289487cc46 Merge branch 'integration' 2010-05-06 07:52:32 -07:00
visionmedia
42b28d5bd6 Added spec / refactored layout of different engine support 2010-05-06 07:52:28 -07:00
visionmedia
46bee05d93 Merge branch 'master' of git://github.com/nick/express into integration 2010-05-06 07:44:43 -07:00
visionmedia
49bed5cd5f Added spec for layouts with different engines 2010-05-06 07:43:54 -07:00
Benny Wong
624cf93e2e Fixing EJS partial support by passing along the context. Issue #307 2010-05-06 01:20:35 -04:00
Nick Poulden
6ab76cda51 Allow layouts to use different engines 2010-05-05 13:19:16 -07:00
Nick Poulden
15beb81368 Allow ejs templates to contain single quotes 2010-05-05 11:42:41 -07:00
visionmedia
6a6cce03b7 Release 0.10.1 2010-05-03 08:42:01 -07:00
Matt Colyer
970ff87ef6 Fix binary uploads. 2010-05-01 11:46:25 -07:00
visionmedia
8b6c4d322f Updated history 2010-04-30 10:46:24 -07:00
visionmedia
4467a00acd Release 0.10.0 2010-04-30 10:34:13 -07:00
visionmedia
63efc61517 Added "dump exceptions" setting, which is enabled by default 2010-04-30 10:09:53 -07:00
visionmedia
7aa18345c8 Added better ejs usage example 2010-04-30 10:05:04 -07:00
visionmedia
34149187a8 Catching ENOENT in view caching, preventing error when "views/partials" is not found 2010-04-30 10:00:00 -07:00
visionmedia
2d132cd0d5 Merge branch 'ejs' 2010-04-30 09:57:23 -07:00
visionmedia
8d741361e0 Added simple ejs support 2010-04-30 09:57:19 -07:00
visionmedia
2bcea3a370 Added more cache key specs 2010-04-30 09:33:10 -07:00
visionmedia
ead3cace02 No need to reverse plugins on each request
This was slowing things down quite a bit
2010-04-30 09:24:17 -07:00
visionmedia
7afa5c7b43 Revert "Clone / reverse plugins ONCE"
shit, was causing some bugs, will figure that out first

This reverts commit 115765e1ee.
2010-04-30 09:18:38 -07:00
visionmedia
115765e1ee Clone / reverse plugins ONCE
huuuuge performance boost
2010-04-30 09:12:48 -07:00
visionmedia
d712fae2d7 Fixed bug producing messed up response bodies
Express was trying to respond twice to the same request
due to an error caused by having no callback,
which was then caught, and responded to using Request#error()

haha!
2010-04-30 08:53:52 -07:00
visionmedia
0dba9bd87f Removed Logger "request" format 2010-04-30 08:40:59 -07:00
visionmedia
2fbc495088 Merge branch 'update-ext' 2010-04-30 08:00:04 -07:00
visionmedia
37d490cbe4 Fixed bug recently introduced preventing plugin events to trigger 2010-04-30 07:59:57 -07:00
visionmedia
451679c582 Cache reaper destroys null caches as well
so they dont linger until expired
2010-04-29 09:01:17 -07:00
visionmedia
7270a13ef7 Fixed compileCookie() utility due to ext changes 2010-04-29 08:56:55 -07:00
visionmedia
16f3f90ed7 Todo 2010-04-29 08:52:48 -07:00
visionmedia
9ff2f81a10 Fixed cache bugs introduced by 1bc9a1a 2010-04-29 08:52:01 -07:00
visionmedia
1bc9a1af6a Fixed Cache Store.Memory usage of Object#reduce() 2010-04-29 08:42:51 -07:00
visionmedia
760d9e3341 Fixed error page hash iteration 2010-04-29 08:35:20 -07:00
visionmedia
5b28abc5ed Fixed session / cache key iteration due to ext changes 2010-04-29 08:23:24 -07:00
visionmedia
defb1596bb Removed Array#at() usage 2010-04-29 08:10:31 -07:00
visionmedia
9c117d5875 Request#accepts() fixed due to ext changes 2010-04-29 08:09:48 -07:00
visionmedia
1b09fce42a Todo 2010-04-29 08:05:51 -07:00
visionmedia
5e328830e7 Replace merge() calls with Object.merge() 2010-04-29 08:04:42 -07:00
visionmedia
606da1c45b Merge branch 'integration' 2010-04-29 06:50:52 -07:00
visionmedia
6232c1a8f3 Several fixes to http client
- Only attempts to "render" data on first request (not redirects)
  - Allows setting of "redirects" via the data variable
  - Fixed Host header predecence issue
  - Only setting Content-Length / Content-Type when not previously set
  - Passing response object on errors
2010-04-29 06:50:46 -07:00
Viktor Kelemen
15a24e68d2 In case of redirect the request function was called with a wrong param list 2010-04-29 19:21:14 +09:00
visionmedia
c12ace81db Fixed Logger content-length 2010-04-28 16:57:55 -07:00
visionmedia
531990b516 Merge branch 'rename-halt' 2010-04-26 09:17:06 -07:00
visionmedia
b90a3dbffe Renamed Request#halt() to Request#respond(). Closes #289
deprecated Request#halt(), however it will remain until 1.0
2010-04-26 09:17:01 -07:00
visionmedia
0352b97798 Merge branch 'integration' 2010-04-26 07:07:15 -07:00
visionmedia
e45abe60bf _ -> val 2010-04-26 07:07:11 -07:00
visionmedia
8077481707 Merge branch 'cache' of git://github.com/aheckmann/express into integration 2010-04-26 07:05:49 -07:00
visionmedia
4651dd33cd Updated haml submodule 2010-04-26 06:56:07 -07:00
visionmedia
c93cfa0871 Added "encoding" option to Request#render(). Closes #299
Should work :)
2010-04-26 06:44:29 -07:00
Aaron Heckmann
d57cb7d411 utilize each() 2010-04-25 00:02:20 -04:00
visionmedia
81088766ee Updated ext submodule 2010-04-24 14:14:51 -07:00
visionmedia
ae59a50c28 Added benchmark link 2010-04-23 15:24:40 -07:00
visionmedia
4a05056393 Removed unused param in Cache.startReaper()
wtf?
2010-04-23 15:15:27 -07:00
visionmedia
71e97c815a Merge branch 'benchmarks' 2010-04-23 14:40:04 -07:00
visionmedia
8b7787aa60 Added sass benchmarks 2010-04-23 14:39:58 -07:00
visionmedia
e0f94b052b Added ruby haml :ugly option to make it render faster in benchmarks 2010-04-23 11:56:12 -07:00
visionmedia
eb2c9ffd32 Added haml benchmarks 2010-04-23 11:49:22 -07:00
visionmedia
5af315c165 Using sys.inspect() instead of JSON.encode() for error output
produces cleaner output
2010-04-23 10:30:59 -07:00
visionmedia
e9fdfc339b Added error reponse support for text/plain, application/json. Closes #297 2010-04-23 10:28:12 -07:00
visionmedia
132730acea Added specs for errors with text/plain and application/json 2010-04-23 09:55:10 -07:00
visionmedia
405097d323 Fixed Request#sendfile() 404 support even when a callback is available 2010-04-23 06:57:02 -07:00
visionmedia
c9d79f26c5 Smooth line graph 2010-04-22 14:18:13 -07:00
visionmedia
7ef13eaf0c Merge branch 'benchmarks' 2010-04-22 14:15:41 -07:00
visionmedia
2756aba21f Added COL 2010-04-22 14:15:36 -07:00
visionmedia
c01a7f57df Merge branch 'benchmarks' 2010-04-22 13:43:14 -07:00
visionmedia
33a4dd3841 Fixed graph labels 2010-04-22 13:43:11 -07:00
visionmedia
3c150db4a2 Merge branch 'benchmarks' 2010-04-22 13:20:27 -07:00
visionmedia
e31f5d2325 Generating bar graphs for requests per sec 2010-04-22 13:20:24 -07:00
visionmedia
f8a61c667e My bad, swap express -> node in graphs 2010-04-22 12:09:40 -07:00
visionmedia
e2fe60399f Merge branch 'benchmarks' 2010-04-22 12:04:32 -07:00
visionmedia
59c4e35691 Added graphing capabilities (gnuplot must be installed) 2010-04-22 12:04:28 -07:00
visionmedia
2dc5afd018 Docs 2010-04-22 11:04:04 -07:00
visionmedia
b5df39bc46 Merge branch 'benchmarks' 2010-04-22 11:02:24 -07:00
visionmedia
f87b709923 Added node static / large static benchmarks 2010-04-22 11:02:21 -07:00
visionmedia
671aa1036b Merge branch 'benchmarks' 2010-04-22 10:55:52 -07:00
visionmedia
4580340db3 Added simple node benchmark 2010-04-22 10:55:46 -07:00
visionmedia
31b53eae39 Added larger ~550kb static benchmarks 2010-04-22 10:41:04 -07:00
visionmedia
089423958d run() returns the http.Server instance. Closes #298 2010-04-22 09:48:20 -07:00
visionmedia
0d02ea43e1 Default Server#host to null (INADDR_ANY)
use run(3000, localhost) etc as needed
2010-04-22 09:43:57 -07:00
visionmedia
93239ae3fb Logger "common" format scale of 0.4f 2010-04-22 09:01:08 -07:00
visionmedia
5d21e9364d Match sinatra buffer size for static benchmark 2010-04-21 18:06:57 -07:00
visionmedia
b9306c4cca Added sinatra static benchmark 2010-04-21 18:05:03 -07:00
visionmedia
c07bd31f61 Outputting rps while benchmarking 2010-04-21 17:07:13 -07:00
visionmedia
fee4830669 Added simple sinatra benchmark 2010-04-21 17:05:39 -07:00
visionmedia
9016b6778e Remove pids 2010-04-21 17:04:19 -07:00
visionmedia
e05501a1ae Added simple thin benchmark 2010-04-21 17:03:39 -07:00
visionmedia
23d09fcc9e Added express static benchmark 2010-04-21 16:53:11 -07:00
visionmedia
5d11fccbf2 Ignore *.out 2010-04-21 16:42:39 -07:00
visionmedia
3851957dd0 Started benchmark script 2010-04-21 16:41:50 -07:00
visionmedia
135afb0883 Revert "Renamed session Base" - haha :) just kidding
This reverts commit 27b27af7cd.
2010-04-21 15:50:54 -07:00
visionmedia
27b27af7cd Renamed session Base 2010-04-21 15:50:43 -07:00
visionmedia
20fe31b803 Removed ETag work-around for bug in node
commit that fixed this: 3934cb5485
2010-04-21 15:33:06 -07:00
visionmedia
ebca9aab8d Fix chat app plugins 2010-04-21 15:13:10 -07:00
visionmedia
49821e0416 Request#stream() fixes
a) on "end" the stream is already destroyed
  b) AFAIK its not destroyed on "error", so now we destroy it
  c) no need to callback(err) unless first
2010-04-21 14:53:46 -07:00
visionmedia
b5d6f1ada5 Merge branch 'etag' 2010-04-21 14:37:17 -07:00
visionmedia
b40325cd7b Misc refactoring to Request#trigger() 2010-04-21 13:49:44 -07:00
visionmedia
3b27ec66e1 Removed "data || {}" in Event constructor. Not needed anymore since Object#merge() handles non objects 2010-04-21 13:42:49 -07:00
visionmedia
52b8b36d54 Updated ext submodule which includes higher performance Object#merge() 2010-04-21 13:14:35 -07:00
visionmedia
7e3106dd1b Increase performance by preventing several calls to toLowerCase() in Router#match()
Roughly 10% increase for routing speeds
2010-04-21 12:48:37 -07:00
visionmedia
399e0d94fc Merge branch 'fix-opera' 2010-04-21 11:45:32 -07:00
visionmedia
eef1ff9e87 Fixed bug preventing Opera from retaining the generated session id. Closes #292
This might not be the best solution, I am not sure what the cookie spec states.
But it works for now :)
2010-04-21 11:45:27 -07:00
visionmedia
9202c7504b Added "request" logger format for debugging http requests 2010-04-21 10:46:01 -07:00
visionmedia
3fd7e3b93e Added make prof so that we can generate v8.log and analyse the output 2010-04-21 09:58:39 -07:00
visionmedia
b6996df86a Added "template created in ..." message in bin/express 2010-04-21 09:24:55 -07:00
visionmedia
4b3efd7bfa Added PREFIX to makefile 2010-04-21 09:24:30 -07:00
visionmedia
12c2682c34 Merge branch 'bin' 2010-04-21 08:57:55 -07:00
visionmedia
2caf67b813 Bash template generator with dummy app 2010-04-21 08:57:50 -07:00
visionmedia
fbbe13661a Added view partials to feature list 2010-04-20 20:59:23 -07:00
visionmedia
0fb102edae Normalized another header name 2010-04-20 20:57:12 -07:00
visionmedia
b4dd90d074 0.9.0 release details link 2010-04-20 19:53:42 -07:00
visionmedia
2e3f806d07 Normalized header conventions.
For example use Content-Type instead of content-type,
Request#header() lowercases when reading a header,
however does not when writing.
2010-04-20 19:33:54 -07:00
visionmedia
f76092e83e Request#error() now accepts a callback function
A common idiom is / will be to accept a callback function in most cases
so this will help to keep things DRY
2010-04-20 19:23:16 -07:00
visionmedia
1e44081583 Added Request#sendHead() 2010-04-20 19:15:30 -07:00
visionmedia
26b3a4259d Added support for Request#halt(status, null) (empty response body) 2010-04-20 19:11:18 -07:00
visionmedia
8a074a7e6d Request#sendfile() Content-Length prevents images from rendering for some reason
commented out for now
2010-04-20 17:27:32 -07:00
visionmedia
e99434582f Added ETag support to Request#sendfile() 2010-04-20 16:44:11 -07:00
visionmedia
fec57df994 Added options to Request#sendfile(), passed to fs.createReadStream() 2010-04-20 13:09:24 -07:00
visionmedia
033cb2d20a Updated haml submodule 2010-04-20 11:07:58 -07:00
visionmedia
a5fa58e3e6 Updated ext submodule 2010-04-20 09:59:35 -07:00
visionmedia
fdc9d2714b Removed unused script from sample upload app.
This was preventing the page from loading
2010-04-20 09:46:02 -07:00
visionmedia
824ca9b513 Merge branch 'update-ext' 2010-04-20 09:32:57 -07:00
visionmedia
a74a740964 Updated ext submodule 2010-04-20 09:32:52 -07:00
visionmedia
2041d52495 no need for type coercion for testing methods 2010-04-20 08:13:38 -07:00
visionmedia
fb5d528eff Merge branch 'stream' 2010-04-19 15:22:24 -07:00
visionmedia
a2cedbd9da Request#download() now accepts second filename arg 2010-04-19 15:20:35 -07:00
visionmedia
8574eddfa0 Misc refactoring to Request#stream() 2010-04-19 14:43:42 -07:00
visionmedia
2ccf876929 Started Request#stream() based of Aarons work on Static#streamfile() 2010-04-19 13:58:29 -07:00
visionmedia
28df150784 Revert "Only unshift support libs once"
This reverts commit 0950083da2.
2010-04-16 10:27:33 -07:00
visionmedia
0950083da2 Only unshift support libs once 2010-04-16 10:25:21 -07:00
visionmedia
88c5f910da Changed; sendfile() using notFound()
instead of halt() so that our DSL-level notFound()
route can handle this as needed. Also outputs the pretty
page when visiting directly
2010-04-15 09:43:29 -07:00
visionmedia
a9d3e4798e Updated node --version supported 2010-04-15 08:50:25 -07:00
visionmedia
d85d834b23 Updated JSpec 2010-04-15 08:49:59 -07:00
visionmedia
5729da5a9f Release 0.9.0 2010-04-14 17:03:57 -07:00
visionmedia
1255331160 Release 0.9.0 2010-04-14 16:56:13 -07:00
visionmedia
0fef51b5f6 Updated git submodules 2010-04-14 16:41:42 -07:00
visionmedia
7cf18c0468 Merge branch 'fix-querystring-0' 2010-04-13 13:25:55 -07:00
visionmedia
b994509b9d Fixed bug preventing falsey params. Closes #286
Request#param() would prevously fail with ?page=0 for example
when param("page") is used since it would return undefined and not 0
2010-04-13 13:25:44 -07:00
visionmedia
6571e19e8f Added spec for #286 2010-04-13 13:17:27 -07:00
visionmedia
7441164db9 Merge branch 'integration' 2010-04-12 20:40:03 -07:00
visionmedia
09bb10cd3f Merge branch 'download' of git://github.com/aheckmann/express into integration 2010-04-12 20:39:20 -07:00
Aaron Heckmann
bd6f24f4b1 add cookie support to readme 2010-04-12 22:56:59 -04:00
Aaron Heckmann
0a174ad219 move Request#download to Static plugin
#download() was a hangover from before the Static plugin existed and no longer worked. Also added missing specs so this won't happen again.
2010-04-12 22:49:49 -04:00
visionmedia
33d004fb9a Fixed MockResponse to match node API 2010-04-12 11:04:52 -07:00
visionmedia
652bf34c77 Merge branch 'integration' 2010-04-12 10:40:08 -07:00
Aaron Heckmann
3f11bad68e fix FileWriteStream.prototype.close renamed to end() 2010-04-11 23:10:41 -04:00
Aaron Heckmann
5245fbfc6d fix OutgoingMessage.prototype.close has been renamed to end() 2010-04-11 23:06:09 -04:00
visionmedia
68f8ee8a99 Fixed "express" executable due to node 0.1.90 changes 2010-04-11 18:39:14 -07:00
visionmedia
7b83a52dce http client fix from node renaming close to end 2010-04-11 18:10:58 -07:00
visionmedia
5f57c82478 Merge branch 'integration' 2010-04-11 18:08:05 -07:00
visionmedia
3128cbef73 Removed TODO comment
added an issue http://github.com/visionmedia/express/issues/issue/285
2010-04-11 18:08:00 -07:00
visionmedia
694b2bf055 Merge branch 'node_0.1.9_fixes' of git://github.com/ciaranj/express into integration 2010-04-11 18:04:31 -07:00
visionmedia
e03a023c5f Merge branch 'integration' 2010-04-11 17:45:19 -07:00
ciaranj
3ff5d3bd09 Temporarily add back in the old multipart support
This will at least get us going again whilst decisions are made :)
2010-04-10 10:06:04 +01:00
ciaranj
04841196e3 Fixed the cookie test so it will work in different timezones.
Tj, I'm not sure what timezone you were in when you wrote the test, but
I've guessed that it was PDT ?   Hopefully this fix allows the test to
run in any timezone :) .. I was surprised that cookies don't use UTC which
could've mate things a lot cleaner, meh, old tech eh.
2010-04-10 09:59:41 +01:00
visionmedia
18dd495d99 Revert "Fixed relative require of Class"
This reverts commit f714945bbb.
2010-04-08 16:09:06 -07:00
visionmedia
f714945bbb Fixed relative require of Class 2010-04-08 15:43:33 -07:00
visionmedia
a318ef2232 Cookie expires now using Date#toGMTString()
Spec I found wanted hyphens, but this appears to be the norm
for JS cookies
2010-04-06 19:40:59 -07:00
visionmedia
8ed24de9d3 Updated haml submodule 2010-04-06 15:32:36 -07:00
visionmedia
e06e50936d Updated sass submodule 2010-04-06 14:38:06 -07:00
visionmedia
d710e9cb47 Merge branch 'integration' 2010-04-06 11:01:23 -07:00
Aaron Heckmann
9af3699850 utilize Date.now() 2010-04-04 12:50:11 -04:00
visionmedia
3cc7b4d8c2 Utilizing Date.now() 2010-04-02 14:12:36 -07:00
visionmedia
8b58732a1f Merge branch 'globals' 2010-04-02 13:35:04 -07:00
visionmedia
a2a0935343 Request is no longer global 2010-04-02 13:13:26 -07:00
visionmedia
2668156e53 Event is no longer global 2010-04-02 13:07:54 -07:00
visionmedia
d67615d239 puts() -> sys.puts() 2010-04-02 13:06:25 -07:00
visionmedia
afd70b64ed Removed "sys" global merge 2010-04-02 13:05:18 -07:00
visionmedia
78a6e43667 Request#render() now only sets option.cache to true when set("cache view contents") is true
to allow development editing of the views
2010-03-31 10:36:52 -07:00
visionmedia
a65af97e43 Docs 2010-03-31 10:28:40 -07:00
visionmedia
637dfabe69 render() always passing "cache" and "filename" options
if the engine does not use them, then they
will be ignored. However this already bumps
haml.js by about %25 in terms of performance
2010-03-31 10:20:24 -07:00
visionmedia
ff8b3c10f3 Updated haml submodule 2010-03-31 10:14:29 -07:00
visionmedia
f442555d8f Updated haml submodule 2010-03-31 08:10:28 -07:00
visionmedia
bdf9f882ad Merge branch 'better-haml' 2010-03-31 07:51:00 -07:00
visionmedia
1e5c5bfe00 Switching around partial filename 2010-03-31 07:50:11 -07:00
visionmedia
0e78fdfcb4 Templates using haml.js instead of haml-js 2010-03-29 10:23:22 -07:00
visionmedia
4f532f86dc Added haml.js submodule; removed haml-js 2010-03-29 09:21:33 -07:00
visionmedia
92844825cb Always httpOnly session cookie 2010-03-29 08:37:57 -07:00
visionmedia
6b13fc99b0 Merge branch 'flip-views' 2010-03-29 08:25:23 -07:00
visionmedia
0f7aa26757 Added deprecation warning for views 2010-03-29 08:25:18 -07:00
visionmedia
a06f963263 Merge branch 'flipViewExt' of git://github.com/aheckmann/express into flip-views 2010-03-29 07:58:13 -07:00
visionmedia
d31de1e654 Defaulting httpOnly for Session cookies, however overridable 2010-03-29 07:55:37 -07:00
Aaron Heckmann
46a0301022 session cookie now httpOnly 2010-03-27 00:21:37 -04:00
Aaron Heckmann
73d26036ef updated specs and example apps
all tests passing
2010-03-27 00:00:49 -04:00
Aaron Heckmann
b9637c9d7d started flipping view extensions 2010-03-27 00:00:49 -04:00
visionmedia
08497683bf Fixed setting of multiple cookies. Closes #199 2010-03-26 16:08:39 -07:00
visionmedia
44a50f6e58 Moved require("http") out of Server#run() 2010-03-26 07:16:55 -07:00
visionmedia
4c2b4e5c66 Removed unused require 2010-03-26 07:16:12 -07:00
Guillermo Rauch
b0884ad7c3 Correction 2010-03-25 19:33:45 -07:00
Guillermo Rauch
cf09f86df2 Expose the http.Server instance 2010-03-25 19:17:43 -07:00
visionmedia
d33c38f671 Merge branch 'integration' 2010-03-25 15:57:08 -07:00
Aaron Heckmann
fbfba21854 multipart parse only when needed 2010-03-25 18:03:32 -04:00
visionmedia
b2093d6f10 Merge branch 'partial-index-and-length' 2010-03-25 12:47:22 -07:00
visionmedia
736a0190c1 Passing __index__, __length__, __isFirst__, __isLast__ to collection partials. Closes #254 2010-03-25 12:47:17 -07:00
visionmedia
a74c259c38 Request instance created before body parsing. Closes #262
Merge branch 'request'
2010-03-25 11:48:35 -07:00
visionmedia
d3dedd6312 Fixed post param issue 2010-03-25 11:44:55 -07:00
visionmedia
920eab0ef9 Fixed mocks to work with new routing api 2010-03-25 11:37:56 -07:00
visionmedia
d576085e8d . 2010-03-25 11:09:50 -07:00
visionmedia
62b9a9e287 Docs 2010-03-25 10:49:25 -07:00
visionmedia
56ffe1d62a Merge branch 'upload-limit' 2010-03-25 10:49:00 -07:00
visionmedia
14acbcb5f1 Added "max upload size" setting 2010-03-25 10:48:55 -07:00
visionmedia
9a0011bf49 Updated ext. Closes #256
Should be fixed now :)
2010-03-25 09:29:52 -07:00
visionmedia
7b9f18b097 Added Request#render() callback function. Closes #258 2010-03-25 08:53:47 -07:00
visionmedia
f8e4333157 Merge branch 'integration' 2010-03-25 08:40:47 -07:00
visionmedia
b5c933aa94 fn -> callback 2010-03-25 08:40:18 -07:00
visionmedia
c441af3f2c Typo 2010-03-25 08:39:48 -07:00
visionmedia
e885421a67 Merge branch 'master' of git://github.com/aheckmann/express into integration 2010-03-25 08:38:54 -07:00
visionmedia
ce4fe24a93 Updated to JSpec 4.0.0 2010-03-25 08:25:38 -07:00
visionmedia
1c0e2ceba5 error() is passed the exception 2010-03-25 08:24:19 -07:00
Aaron Heckmann
a435e8ec47 fn -> callback 2010-03-25 11:22:48 -04:00
visionmedia
b958393135 Added DSL level error() route support 2010-03-25 08:21:49 -07:00
visionmedia
a6dd697a68 Added DSL level notFound() route support 2010-03-25 08:13:22 -07:00
visionmedia
a4833e7b35 Added specs for Request#notFound() 2010-03-25 07:58:28 -07:00
visionmedia
54fa643c10 More Request#error() specs 2010-03-25 07:54:07 -07:00
visionmedia
6047cd4542 Added specs for Request#error() 2010-03-25 07:51:19 -07:00
visionmedia
8c5f7df280 Merge branch 'errors' 2010-03-25 07:35:44 -07:00
visionmedia
ff1250c33c Added publish Request#notFound() 2010-03-25 07:35:39 -07:00
visionmedia
4297c10fe9 Removed Express.error(), Added public Request#error() 2010-03-25 07:18:55 -07:00
visionmedia
ab6ad94ec3 Request#halt() accepts callback function as 3rd/4th arg 2010-03-24 16:05:34 -07:00
visionmedia
759183461f Merge branch 'error-handling' 2010-03-24 15:44:50 -07:00
visionmedia
f850fa6bc9 Misc error handling improvements 2010-03-24 15:44:46 -07:00
visionmedia
5a242d35b7 Removed unused variable 2010-03-24 15:15:45 -07:00
visionmedia
abf5d66e01 Merge branch 'error-handling' 2010-03-24 15:08:51 -07:00
visionmedia
e92360e0d4 Caching notFound / showException modules 2010-03-24 15:08:06 -07:00
visionmedia
b5c0fdc013 Express.error() now acts as the core exception handler 2010-03-24 14:54:13 -07:00
visionmedia
906ef02c5e request response event is now fired in reverse.
This does a few things:
  a. Allows plugins such as Logger to properly "wrap" all
     other plugins when it is the first passed to use().

  b. Lessons the chance of a plugin failure effecting another plugin
2010-03-24 14:45:46 -07:00
visionmedia
7550decbc0 Handle when a plugin response fails 2010-03-24 14:32:08 -07:00
visionmedia
acd88c3c8a next -> callback 2010-03-24 12:56:26 -07:00
visionmedia
a3854a2de1 Styling 2010-03-24 12:54:52 -07:00
visionmedia
880aca5d83 Removed set("session cookie") in favour of use(Session, { cookie: { ... }}) 2010-03-24 12:53:33 -07:00
visionmedia
2d1c98a5a7 Docs for stable / edge 2010-03-24 08:33:43 -07:00
visionmedia
fefa06ba21 Merge branch 'route-wildcards' 2010-03-23 10:41:31 -07:00
visionmedia
18faa91c94 Added preprocessing of route param wildcards using param(). Closes #251
Async is yet to come
2010-03-23 10:41:25 -07:00
visionmedia
9f23c7b31a Added specs for param() 2010-03-23 10:31:46 -07:00
visionmedia
eee6926bab Added more route wildcard specs 2010-03-23 10:11:52 -07:00
visionmedia
6806f952d6 Merge branch 'pre-cache-views' 2010-03-23 09:53:23 -07:00
visionmedia
faaef54b42 Pre-caching views in memory. Closes #253
This mirrors the partial caching functionality. This
causes a slight overhead at boot time, however prevents
the need to perform cache checks per render() call.
2010-03-23 09:53:17 -07:00
visionmedia
c29852fae7 Started pre caching of views 2010-03-23 09:42:23 -07:00
visionmedia
7d100dae97 Merge branch 'integration' 2010-03-22 15:34:50 -07:00
visionmedia
206e800963 Added assertion to ensure that partials dir is relative to set("views") 2010-03-22 15:34:46 -07:00
visionmedia
555a334315 Re-using variables 2010-03-22 15:33:08 -07:00
visionmedia
d2c5def108 Using set("views") when setting set("partials")
So that /partials is always relative by default
2010-03-22 15:31:39 -07:00
visionmedia
98323c530e partialscache -> partials 2010-03-22 15:30:34 -07:00
Aaron Heckmann
b36510dbb9 preload partials
add settings
bug fix, partial now works when cache view contents is true
2010-03-22 18:16:40 -04:00
Aaron Heckmann
50e533c32b add cache view partials 2010-03-22 16:40:35 -04:00
visionmedia
33277c3d37 Removed utils.mixin() use Object#mergeDeep()
jQuery is messy, and this implementation is way to
slow for SSJS, and just gross :)
2010-03-22 11:28:23 -07:00
visionmedia
28f2ad0109 Merge branch 'partials' 2010-03-22 10:21:42 -07:00
visionmedia
5d10ee4e61 Chat sample app using partials as an example 2010-03-22 10:21:37 -07:00
visionmedia
b4190ada0c Added partial "as" option 2010-03-22 10:16:12 -07:00
visionmedia
60d314552d Partial collection should not introduce newlines 2010-03-22 10:13:25 -07:00
visionmedia
c971d54543 Added partial collection support 2010-03-22 10:12:52 -07:00
visionmedia
346f019fa8 Started view partial support 2010-03-22 10:05:05 -07:00
visionmedia
d61c2480b6 Updated ext submodule 2010-03-22 09:12:24 -07:00
visionmedia
e30b5b86da Removed Request#_blendInNodeRequest() 2010-03-22 09:12:09 -07:00
visionmedia
bd74fe24fd Merge branch 'net2_fixes' of git://github.com/ciaranj/express 2010-03-22 09:05:58 -07:00
visionmedia
b30eaa8ee3 Updated support to v0.1.33 2010-03-22 08:34:05 -07:00
ciaranj
75c530516a Various minor fixes required to make express work post the net2 merge branch 2010-03-20 12:26:37 +00:00
visionmedia
3b49821e82 Release 0.8.0 2010-03-19 16:51:43 -07:00
visionmedia
febf443960 Fixed session reaper 2010-03-19 15:57:25 -07:00
visionmedia
f5da81e782 Removed a comment from chat app 2010-03-19 14:38:26 -07:00
visionmedia
9cb23ac584 Merge branch 'coffee' 2010-03-19 14:14:52 -07:00
visionmedia
6ff3100c1f Added coffeescript example app. Closes #242 2010-03-19 14:14:46 -07:00
visionmedia
e3ea3723bf Added dir for coffeescript example 2010-03-19 13:56:31 -07:00
visionmedia
33443d9b41 Merge branch 'integration' 2010-03-19 10:13:26 -07:00
visionmedia
e0ef61659f Merge branch 'async-session' into integration 2010-03-19 10:12:56 -07:00
visionmedia
655ad77bce fn -> callback 2010-03-19 09:55:06 -07:00
visionmedia
c09e546240 Removed session reaper try/catch
we can revisit this issue later,
and deal with it across Cache as well
2010-03-19 09:53:33 -07:00
visionmedia
a08b14a89e Misc Session refactoring 2010-03-19 09:52:18 -07:00
visionmedia
12e90b0eef Merge branch 'session_with_callbacks' of git://github.com/ciaranj/express into async-session 2010-03-19 09:41:30 -07:00
visionmedia
7606f1bcbd Merge branch 'async-cache' 2010-03-19 09:38:47 -07:00
visionmedia
cabb43b187 Finished converting async cache api. Closes #240 2010-03-19 09:38:42 -07:00
visionmedia
b85cda3f6e Cache api is now async 2010-03-19 09:19:22 -07:00
visionmedia
b92f1b7497 Async cache specs 2010-03-19 09:04:31 -07:00
visionmedia
273a51a335 Release 0.7.6 2010-03-19 08:55:52 -07:00
ciaranj
212dc88b89 Squashed commit of the changes I've put in place to support callback
methods on the session object.

This code changes the behaviour of the session handling in a fairly key
way:

If an unknown session id is seen then a *new* session is created with a *new* session
id.  The previous behaviour was to create a new session with the existing id.
2010-03-19 13:55:51 +00:00
visionmedia
ce82a91d14 Revert "Fail to test CI"
This reverts commit 52a08401c7.
2010-03-18 16:20:53 -07:00
visionmedia
52a08401c7 Fail to test CI 2010-03-18 16:20:12 -07:00
visionmedia
706c0cb033 View support listed in features already 2010-03-18 16:19:39 -07:00
visionmedia
1567a613a6 Closes #63.
Merge branch 'cli'
2010-03-18 13:02:00 -07:00
visionmedia
d767d80d20 Added make install 2010-03-18 13:01:28 -07:00
visionmedia
1103a9d510 Moved a helper function to the helpers section 2010-03-18 13:00:34 -07:00
visionmedia
c34af4b97a Started executable 2010-03-18 12:57:44 -07:00
visionmedia
8dcee4d338 Request#render() only calls cache.get() once 2010-03-18 11:40:48 -07:00
visionmedia
fc1e69ea73 Namespacing View caches with "view:" 2010-03-18 11:40:04 -07:00
visionmedia
db460117c1 Namespacing Static caches with "static:" 2010-03-18 11:39:23 -07:00
visionmedia
1c514df0fd Fixed ternary style 2010-03-18 11:37:34 -07:00
visionmedia
780ec5cbec Docs 2010-03-18 11:27:15 -07:00
visionmedia
3721873b62 Both example apps now use Static 2010-03-18 11:23:07 -07:00
visionmedia
3bdc77ca91 Deprecated Request#sendfile() and express/static 2010-03-18 11:22:40 -07:00
visionmedia
b8f54d64a4 Closes #88.
Merge branch 'runtime-routes'
2010-03-18 11:17:16 -07:00
visionmedia
90d48b320a Added "GET /public/*" to Static plugin, defaulting to <root>/public 2010-03-18 11:16:55 -07:00
visionmedia
a797342800 Static is now a plugin 2010-03-18 11:09:25 -07:00
visionmedia
31e608e0ae Added Request#sendfile() specs 2010-03-18 10:58:50 -07:00
visionmedia
ebcfb0e577 Removed Server#running 2010-03-18 10:31:40 -07:00
visionmedia
161c9f9142 Closes #52
fs.readFile becomes fs.readFileSync when testing

Merge branch 'view-specs'
2010-03-18 10:17:03 -07:00
visionmedia
2a099da726 Fixed a few specs 2010-03-18 10:16:14 -07:00
visionmedia
5118397004 Added auto content-type view spec 2010-03-18 10:14:10 -07:00
visionmedia
546c340656 Added view custom context spec 2010-03-18 10:12:20 -07:00
visionmedia
3034cc7c52 View context spec 2010-03-18 10:10:10 -07:00
visionmedia
d89381ff78 Added layout local var access spec 2010-03-18 10:04:25 -07:00
visionmedia
86cac58100 Added view locals spec 2010-03-18 09:54:29 -07:00
visionmedia
8fc062007e Added spec for invalid view engine 2010-03-18 09:51:48 -07:00
visionmedia
9fd92e3306 Added view caching specs 2010-03-18 09:50:16 -07:00
visionmedia
a4cbbe5dd4 Spec for layout: false 2010-03-18 09:36:57 -07:00
visionmedia
da7ea9655f Spec for custom layout 2010-03-18 09:36:12 -07:00
visionmedia
00a8c642dd Started view specs 2010-03-18 09:32:32 -07:00
visionmedia
e1152f6e56 Typo 2010-03-18 09:12:46 -07:00
visionmedia
7cf9c6842a Merge branch 'fix-views' 2010-03-18 09:08:06 -07:00
visionmedia
d375535cd9 Fixed set("views"). Closes #239
This actually should have never worked (if it even did).
My bad :)
2010-03-18 09:08:02 -07:00
visionmedia
c5ea868f47 Merge branch 'bugfix' of git://github.com/aheckmann/express 2010-03-18 08:02:23 -07:00
visionmedia
884d333805 Added Request#isXHR. Closes #229
Merge branch 'integration'
2010-03-18 07:55:30 -07:00
visionmedia
3b9921a15b Added Request#isXHR specs 2010-03-18 07:54:34 -07:00
Aaron Heckmann
17b753d95e add missing space to combined log format 2010-03-17 22:38:45 -04:00
Aaron Heckmann
6a8781b5e2 add request.isXHR 2010-03-17 22:16:13 -04:00
Aaron Heckmann
0dfaf01749 add git clone to git command 2010-03-17 21:40:13 -04:00
visionmedia
088aa83e22 Updated feature list 2010-03-17 16:07:53 -07:00
visionmedia
934adb1e9f Release 0.7.5 2010-03-16 19:38:21 -07:00
visionmedia
50e0593de6 Request#flash() without args now returns all flashes 2010-03-16 19:34:11 -07:00
visionmedia
f2637c6421 Fixed Request#flash() specs 2010-03-16 19:22:10 -07:00
visionmedia
a52dacea68 Updated ext 2010-03-16 19:12:15 -07:00
visionmedia
f56a33d22d Release 0.7.4 2010-03-16 16:14:48 -07:00
visionmedia
2aa858b0fb Merge branch 'class' 2010-03-16 16:12:42 -07:00
visionmedia
c3b8ba4b9a NewClass -> Class, removed js-oo dependency 2010-03-16 16:12:14 -07:00
visionmedia
ac96b8c0e1 Update class.js submodule with Class#include() 2010-03-16 16:10:39 -07:00
visionmedia
a329a9f4d8 Converted more to use class.js 2010-03-16 15:53:32 -07:00
visionmedia
63cc7eb44d Converted more to use class.js 2010-03-16 15:50:17 -07:00
visionmedia
6505f32221 Started conversion of js-oo Class -> class.js 2010-03-16 15:46:22 -07:00
visionmedia
22088260f4 Fixed session reaper 2010-03-16 13:25:39 -07:00
visionmedia
d893009a8d Release 0.7.3 2010-03-16 13:17:41 -07:00
visionmedia
b62e1741be Fixed requiring of haml / sass 2010-03-16 13:16:55 -07:00
visionmedia
903c2aa642 Added package.json 2010-03-16 08:31:33 -07:00
visionmedia
d0a8bb550e Release 0.7.2 2010-03-16 08:08:17 -07:00
visionmedia
f96f1423e1 Fixed GIT submodules (HAH!) 2010-03-16 08:06:26 -07:00
visionmedia
7bf17f2f61 Removed old support dir 2010-03-16 08:03:57 -07:00
visionmedia
670b6cfc15 Merge branch 'remove-kiwi' 2010-03-16 08:03:33 -07:00
visionmedia
b6d2c8479c Release 0.7.1 2010-03-16 08:03:06 -07:00
visionmedia
5aaa114271 Docs 2010-03-16 08:01:51 -07:00
visionmedia
e99c2791bb Docs 2010-03-16 07:58:06 -07:00
visionmedia
656d7754cd Express now using submodules again until a PM is adopted 2010-03-16 07:54:20 -07:00
visionmedia
4aaf10fbfc Moved support 2010-03-16 07:39:56 -07:00
visionmedia
85e77b77aa Added submodules 2010-03-16 07:02:49 -07:00
visionmedia
f23ef09247 Chat example using millisecond conversions from ext 2010-03-15 16:00:39 -07:00
visionmedia
440d956438 Refactored Session#startReaper() with ext millisecond conversions 2010-03-15 15:59:37 -07:00
visionmedia
acd2852cf3 ext >= 0.2.4 2010-03-15 15:58:02 -07:00
visionmedia
4246f43bdf ext >= 0.2.3 2010-03-15 09:57:38 -07:00
visionmedia
7d33769cd2 Revert "Removed sass / haml "dependencies""
This reverts commit 31fdba80d4.
2010-03-15 09:43:29 -07:00
visionmedia
31fdba80d4 Removed sass / haml "dependencies" 2010-03-15 09:42:15 -07:00
visionmedia
77f8e460d0 Better example app 2010-03-15 09:31:11 -07:00
visionmedia
51e51db9f7 Docs 2010-03-15 09:16:13 -07:00
279 changed files with 14764 additions and 7227 deletions

12
.gitignore vendored
View File

@@ -1,3 +1,13 @@
.DS_Store
lib-cov
*.seed
*.log
*.log
*.csv
*.dat
*.out
*.pid
*.swp
*.swo
benchmarks/graphs
testing.js
node_modules/

7
.npmignore Normal file
View File

@@ -0,0 +1,7 @@
.git*
docs/
examples/
support/
test/
testing.js
.DS_Store

View File

@@ -1,4 +1,536 @@
2.3.7 / 2011-05-23
==================
* Added route `Collection`, ex: `app.get('/user/:id').remove();`
* Added support for `app.param(fn)` to define param logic
* Removed `app.param()` support for callback with return value
* Removed module.parent check from express(1) generated app. Closes #670
* Refactored router. Closes #639
2.3.6 / 2011-05-20
==================
* Changed; using devDependencies instead of git submodules
* Fixed redis session example
* Fixed markdown example
* Fixed view caching, should not be enabled in development
2.3.5 / 2011-05-20
==================
* Added export `.view` as alias for `.View`
2.3.4 / 2011-05-08
==================
* Added `./examples/say`
* Fixed `res.sendfile()` bug preventing the transfer of files with spaces
2.3.3 / 2011-05-03
==================
* Added "case sensitive routes" option.
* Changed; split methods supported per rfc [slaskis]
* Fixed route-specific middleware when using the same callback function several times
2.3.2 / 2011-04-27
==================
* Fixed view hints
2.3.1 / 2011-04-26
==================
* Added `app.match()` as `app.match.all()`
* Added `app.lookup()` as `app.lookup.all()`
* Added `app.remove()` for `app.remove.all()`
* Added `app.remove.VERB()`
* Fixed template caching collision issue. Closes #644
* Moved router over from connect and started refactor
2.3.0 / 2011-04-25
==================
* Added options support to `res.clearCookie()`
* Added `res.helpers()` as alias of `res.locals()`
* Added; json defaults to UTF-8 with `res.send()`. Closes #632. [Daniel * Dependency `connect >= 1.4.0`
* Changed; auto set Content-Type in res.attachement [Aaron Heckmann]
* Renamed "cache views" to "view cache". Closes #628
* Fixed caching of views when using several apps. Closes #637
* Fixed gotcha invoking `app.param()` callbacks once per route middleware.
Closes #638
* Fixed partial lookup precedence. Closes #631
Shaw]
2.2.2 / 2011-04-12
==================
* Added second callback support for `res.download()` connection errors
* Fixed `filename` option passing to template engine
2.2.1 / 2011-04-04
==================
* Added `layout(path)` helper to change the layout within a view. Closes #610
* Fixed `partial()` collection object support.
Previously only anything with `.length` would work.
When `.length` is present one must still be aware of holes,
however now `{ collection: {foo: 'bar'}}` is valid, exposes
`keyInCollection` and `keysInCollection`.
* Performance improved with better view caching
* Removed `request` and `response` locals
* Changed; errorHandler page title is now `Express` instead of `Connect`
2.2.0 / 2011-03-30
==================
* Added `app.lookup.VERB()`, ex `app.lookup.put('/user/:id')`. Closes #606
* Added `app.match.VERB()`, ex `app.match.put('/user/12')`. Closes #606
* Added `app.VERB(path)` as alias of `app.lookup.VERB()`.
* Dependency `connect >= 1.2.0`
2.1.1 / 2011-03-29
==================
* Added; expose `err.view` object when failing to locate a view
* Fixed `res.partial()` call `next(err)` when no callback is given [reported by aheckmann]
* Fixed; `res.send(undefined)` responds with 204 [aheckmann]
2.1.0 / 2011-03-24
==================
* Added `<root>/_?<name>` partial lookup support. Closes #447
* Added `request`, `response`, and `app` local variables
* Added `settings` local variable, containing the app's settings
* Added `req.flash()` exception if `req.session` is not available
* Added `res.send(bool)` support (json response)
* Fixed stylus example for latest version
* Fixed; wrap try/catch around `res.render()`
2.0.0 / 2011-03-17
==================
* Fixed up index view path alternative.
* Changed; `res.locals()` without object returns the locals
2.0.0rc3 / 2011-03-17
==================
* Added `res.locals(obj)` to compliment `res.local(key, val)`
* Added `res.partial()` callback support
* Fixed recursive error reporting issue in `res.render()`
2.0.0rc2 / 2011-03-17
==================
* Changed; `partial()` "locals" are now optional
* Fixed `SlowBuffer` support. Closes #584 [reported by tyrda01]
* Fixed .filename view engine option [reported by drudge]
* Fixed blog example
* Fixed `{req,res}.app` reference when mounting [Ben Weaver]
2.0.0rc / 2011-03-14
==================
* Fixed; expose `HTTPSServer` constructor
* Fixed express(1) default test charset. Closes #579 [reported by secoif]
* Fixed; default charset to utf-8 instead of utf8 for lame IE [reported by NickP]
2.0.0beta3 / 2011-03-09
==================
* Added support for `res.contentType()` literal
The original `res.contentType('.json')`,
`res.contentType('application/json')`, and `res.contentType('json')`
will work now.
* Added `res.render()` status option support back
* Added charset option for `res.render()`
* Added `.charset` support (via connect 1.0.4)
* Added view resolution hints when in development and a lookup fails
* Added layout lookup support relative to the page view.
For example while rendering `./views/user/index.jade` if you create
`./views/user/layout.jade` it will be used in favour of the root layout.
* Fixed `res.redirect()`. RFC states absolute url [reported by unlink]
* Fixed; default `res.send()` string charset to utf8
* Removed `Partial` constructor (not currently used)
2.0.0beta2 / 2011-03-07
==================
* Added res.render() `.locals` support back to aid in migration process
* Fixed flash example
2.0.0beta / 2011-03-03
==================
* Added HTTPS support
* Added `res.cookie()` maxAge support
* Added `req.header()` _Referrer_ / _Referer_ special-case, either works
* Added mount support for `res.redirect()`, now respects the mount-point
* Added `union()` util, taking place of `merge(clone())` combo
* Added stylus support to express(1) generated app
* Added secret to session middleware used in examples and generated app
* Added `res.local(name, val)` for progressive view locals
* Added default param support to `req.param(name, default)`
* Added `app.disabled()` and `app.enabled()`
* Added `app.register()` support for omitting leading ".", either works
* Added `res.partial()`, using the same interface as `partial()` within a view. Closes #539
* Added `app.param()` to map route params to async/sync logic
* Added; aliased `app.helpers()` as `app.locals()`. Closes #481
* Added extname with no leading "." support to `res.contentType()`
* Added `cache views` setting, defaulting to enabled in "production" env
* Added index file partial resolution, eg: partial('user') may try _views/user/index.jade_.
* Added `req.accepts()` support for extensions
* Changed; `res.download()` and `res.sendfile()` now utilize Connect's
static file server `connect.static.send()`.
* Changed; replaced `connect.utils.mime()` with npm _mime_ module
* Changed; allow `req.query` to be pre-defined (via middleware or other parent
* Changed view partial resolution, now relative to parent view
* Changed view engine signature. no longer `engine.render(str, options, callback)`, now `engine.compile(str, options) -> Function`, the returned function accepts `fn(locals)`.
* Fixed `req.param()` bug returning Array.prototype methods. Closes #552
* Fixed; using `Stream#pipe()` instead of `sys.pump()` in `res.sendfile()`
* Fixed; using _qs_ module instead of _querystring_
* Fixed; strip unsafe chars from jsonp callbacks
* Removed "stream threshold" setting
1.0.8 / 2011-03-01
==================
* Allow `req.query` to be pre-defined (via middleware or other parent app)
* "connect": ">= 0.5.0 < 1.0.0". Closes #547
* Removed the long deprecated __EXPRESS_ENV__ support
1.0.7 / 2011-02-07
==================
* Fixed `render()` setting inheritance.
Mounted apps would not inherit "view engine"
1.0.6 / 2011-02-07
==================
* Fixed `view engine` setting bug when period is in dirname
1.0.5 / 2011-02-05
==================
* Added secret to generated app `session()` call
1.0.4 / 2011-02-05
==================
* Added `qs` dependency to _package.json_
* Fixed namespaced `require()`s for latest connect support
1.0.3 / 2011-01-13
==================
* Remove unsafe characters from JSONP callback names [Ryan Grove]
1.0.2 / 2011-01-10
==================
* Removed nested require, using `connect.router`
1.0.1 / 2010-12-29
==================
* Fixed for middleware stacked via `createServer()`
previously the `foo` middleware passed to `createServer(foo)`
would not have access to Express methods such as `res.send()`
or props like `req.query` etc.
1.0.0 / 2010-11-16
==================
* Added; deduce partial object names from the last segment.
For example by default `partial('forum/post', postObject)` will
give you the _post_ object, providing a meaningful default.
* Added http status code string representation to `res.redirect()` body
* Added; `res.redirect()` supporting _text/plain_ and _text/html_ via __Accept__.
* Added `req.is()` to aid in content negotiation
* Added partial local inheritance [suggested by masylum]. Closes #102
providing access to parent template locals.
* Added _-s, --session[s]_ flag to express(1) to add session related middleware
* Added _--template_ flag to express(1) to specify the
template engine to use.
* Added _--css_ flag to express(1) to specify the
stylesheet engine to use (or just plain css by default).
* Added `app.all()` support [thanks aheckmann]
* Added partial direct object support.
You may now `partial('user', user)` providing the "user" local,
vs previously `partial('user', { object: user })`.
* Added _route-separation_ example since many people question ways
to do this with CommonJS modules. Also view the _blog_ example for
an alternative.
* Performance; caching view path derived partial object names
* Fixed partial local inheritance precedence. [reported by Nick Poulden] Closes #454
* Fixed jsonp support; _text/javascript_ as per mailinglist discussion
1.0.0rc4 / 2010-10-14
==================
* Added _NODE_ENV_ support, _EXPRESS_ENV_ is deprecated and will be removed in 1.0.0
* Added route-middleware support (very helpful, see the [docs](http://expressjs.com/guide.html#Route-Middleware))
* Added _jsonp callback_ setting to enable/disable jsonp autowrapping [Dav Glass]
* Added callback query check on response.send to autowrap JSON objects for simple webservice implementations [Dav Glass]
* Added `partial()` support for array-like collections. Closes #434
* Added support for swappable querystring parsers
* Added session usage docs. Closes #443
* Added dynamic helper caching. Closes #439 [suggested by maritz]
* Added authentication example
* Added basic Range support to `res.sendfile()` (and `res.download()` etc)
* Changed; `express(1)` generated app using 2 spaces instead of 4
* Default env to "development" again [aheckmann]
* Removed _context_ option is no more, use "scope"
* Fixed; exposing _./support_ libs to examples so they can run without installs
* Fixed mvc example
1.0.0rc3 / 2010-09-20
==================
* Added confirmation for `express(1)` app generation. Closes #391
* Added extending of flash formatters via `app.flashFormatters`
* Added flash formatter support. Closes #411
* Added streaming support to `res.sendfile()` using `sys.pump()` when >= "stream threshold"
* Added _stream threshold_ setting for `res.sendfile()`
* Added `res.send()` __HEAD__ support
* Added `res.clearCookie()`
* Added `res.cookie()`
* Added `res.render()` headers option
* Added `res.redirect()` response bodies
* Added `res.render()` status option support. Closes #425 [thanks aheckmann]
* Fixed `res.sendfile()` responding with 403 on malicious path
* Fixed `res.download()` bug; when an error occurs remove _Content-Disposition_
* Fixed; mounted apps settings now inherit from parent app [aheckmann]
* Fixed; stripping Content-Length / Content-Type when 204
* Fixed `res.send()` 204. Closes #419
* Fixed multiple _Set-Cookie_ headers via `res.header()`. Closes #402
* Fixed bug messing with error handlers when `listenFD()` is called instead of `listen()`. [thanks guillermo]
1.0.0rc2 / 2010-08-17
==================
* Added `app.register()` for template engine mapping. Closes #390
* Added `res.render()` callback support as second argument (no options)
* Added callback support to `res.download()`
* Added callback support for `res.sendfile()`
* Added support for middleware access via `express.middlewareName()` vs `connect.middlewareName()`
* Added "partials" setting to docs
* Added default expresso tests to `express(1)` generated app. Closes #384
* Fixed `res.sendfile()` error handling, defer via `next()`
* Fixed `res.render()` callback when a layout is used [thanks guillermo]
* Fixed; `make install` creating ~/.node_libraries when not present
* Fixed issue preventing error handlers from being defined anywhere. Closes #387
1.0.0rc / 2010-07-28
==================
* Added mounted hook. Closes #369
* Added connect dependency to _package.json_
* Removed "reload views" setting and support code
development env never caches, production always caches.
* Removed _param_ in route callbacks, signature is now
simply (req, res, next), previously (req, res, params, next).
Use _req.params_ for path captures, _req.query_ for GET params.
* Fixed "home" setting
* Fixed middleware/router precedence issue. Closes #366
* Fixed; _configure()_ callbacks called immediately. Closes #368
1.0.0beta2 / 2010-07-23
==================
* Added more examples
* Added; exporting `Server` constructor
* Added `Server#helpers()` for view locals
* Added `Server#dynamicHelpers()` for dynamic view locals. Closes #349
* Added support for absolute view paths
* Added; _home_ setting defaults to `Server#route` for mounted apps. Closes #363
* Added Guillermo Rauch to the contributor list
* Added support for "as" for non-collection partials. Closes #341
* Fixed _install.sh_, ensuring _~/.node_libraries_ exists. Closes #362 [thanks jf]
* Fixed `res.render()` exceptions, now passed to `next()` when no callback is given [thanks guillermo]
* Fixed instanceof `Array` checks, now `Array.isArray()`
* Fixed express(1) expansion of public dirs. Closes #348
* Fixed middleware precedence. Closes #345
* Fixed view watcher, now async [thanks aheckmann]
1.0.0beta / 2010-07-15
==================
* Re-write
- much faster
- much lighter
- Check [ExpressJS.com](http://expressjs.com) for migration guide and updated docs
0.14.0 / 2010-06-15
==================
* Utilize relative requires
* Added Static bufferSize option [aheckmann]
* Fixed caching of view and partial subdirectories [aheckmann]
* Fixed mime.type() comments now that ".ext" is not supported
* Updated haml submodule
* Updated class submodule
* Removed bin/express
0.13.0 / 2010-06-01
==================
* Added node v0.1.97 compatibility
* Added support for deleting cookies via Request#cookie('key', null)
* Updated haml submodule
* Fixed not-found page, now using using charset utf-8
* Fixed show-exceptions page, now using using charset utf-8
* Fixed view support due to fs.readFile Buffers
* Changed; mime.type() no longer accepts ".type" due to node extname() changes
0.12.0 / 2010-05-22
==================
* Added node v0.1.96 compatibility
* Added view `helpers` export which act as additional local variables
* Updated haml submodule
* Changed ETag; removed inode, modified time only
* Fixed LF to CRLF for setting multiple cookies
* Fixed cookie complation; values are now urlencoded
* Fixed cookies parsing; accepts quoted values and url escaped cookies
0.11.0 / 2010-05-06
==================
* Added support for layouts using different engines
- this.render('page.html.haml', { layout: 'super-cool-layout.html.ejs' })
- this.render('page.html.haml', { layout: 'foo' }) // assumes 'foo.html.haml'
- this.render('page.html.haml', { layout: false }) // no layout
* Updated ext submodule
* Updated haml submodule
* Fixed EJS partial support by passing along the context. Issue #307
0.10.1 / 2010-05-03
==================
* Fixed binary uploads.
0.10.0 / 2010-04-30
==================
* Added charset support via Request#charset (automatically assigned to 'UTF-8' when respond()'s
encoding is set to 'utf8' or 'utf-8'.
* Added "encoding" option to Request#render(). Closes #299
* Added "dump exceptions" setting, which is enabled by default.
* Added simple ejs template engine support
* Added error reponse support for text/plain, application/json. Closes #297
* Added callback function param to Request#error()
* Added Request#sendHead()
* Added Request#stream()
* Added support for Request#respond(304, null) for empty response bodies
* Added ETag support to Request#sendfile()
* Added options to Request#sendfile(), passed to fs.createReadStream()
* Added filename arg to Request#download()
* Performance enhanced due to pre-reversing plugins so that plugins.reverse() is not called on each request
* Performance enhanced by preventing several calls to toLowerCase() in Router#match()
* Changed; Request#sendfile() now streams
* Changed; Renamed Request#halt() to Request#respond(). Closes #289
* Changed; Using sys.inspect() instead of JSON.encode() for error output
* Changed; run() returns the http.Server instance. Closes #298
* Changed; Defaulting Server#host to null (INADDR_ANY)
* Changed; Logger "common" format scale of 0.4f
* Removed Logger "request" format
* Fixed; Catching ENOENT in view caching, preventing error when "views/partials" is not found
* Fixed several issues with http client
* Fixed Logger Content-Length output
* Fixed bug preventing Opera from retaining the generated session id. Closes #292
0.9.0 / 2010-04-14
==================
* Added DSL level error() route support
* Added DSL level notFound() route support
* Added Request#error()
* Added Request#notFound()
* Added Request#render() callback function. Closes #258
* Added "max upload size" setting
* Added "magic" variables to collection partials (\_\_index\_\_, \_\_length\_\_, \_\_isFirst\_\_, \_\_isLast\_\_). Closes #254
* Added [haml.js](http://github.com/visionmedia/haml.js) submodule; removed haml-js
* Added callback function support to Request#halt() as 3rd/4th arg
* Added preprocessing of route param wildcards using param(). Closes #251
* Added view partial support (with collections etc)
* Fixed bug preventing falsey params (such as ?page=0). Closes #286
* Fixed setting of multiple cookies. Closes #199
* Changed; view naming convention is now NAME.TYPE.ENGINE (for example page.html.haml)
* Changed; session cookie is now httpOnly
* Changed; Request is no longer global
* Changed; Event is no longer global
* Changed; "sys" module is no longer global
* Changed; moved Request#download to Static plugin where it belongs
* Changed; Request instance created before body parsing. Closes #262
* Changed; Pre-caching views in memory when "cache view contents" is enabled. Closes #253
* Changed; Pre-caching view partials in memory when "cache view partials" is enabled
* Updated support to node --version 0.1.90
* Updated dependencies
* Removed set("session cookie") in favour of use(Session, { cookie: { ... }})
* Removed utils.mixin(); use Object#mergeDeep()
0.8.0 / 2010-03-19
==================
* Added coffeescript example app. Closes #242
* Changed; cache api now async friendly. Closes #240
* Removed deprecated 'express/static' support. Use 'express/plugins/static'
0.7.6 / 2010-03-19
==================
* Added Request#isXHR. Closes #229
* Added `make install` (for the executable)
* Added `express` executable for setting up simple app templates
* Added "GET /public/*" to Static plugin, defaulting to <root>/public
* Added Static plugin
* Fixed; Request#render() only calls cache.get() once
* Fixed; Namespacing View caches with "view:"
* Fixed; Namespacing Static caches with "static:"
* Fixed; Both example apps now use the Static plugin
* Fixed set("views"). Closes #239
* Fixed missing space for combined log format
* Deprecated Request#sendfile() and 'express/static'
* Removed Server#running
0.7.5 / 2010-03-16
==================
* Added Request#flash() support without args, now returns all flashes
* Updated ext submodule
0.7.4 / 2010-03-16
==================
* Fixed session reaper
* Changed; class.js replacing js-oo Class implementation (quite a bit faster, no browser cruft)
0.7.3 / 2010-03-16
==================
* Added package.json
* Fixed requiring of haml / sass due to kiwi removal
0.7.2 / 2010-03-16
==================
* Fixed GIT submodules (HAH!)
0.7.1 / 2010-03-16
==================
* Changed; Express now using submodules again until a PM is adopted
* Changed; chat example using millisecond conversions from ext
0.7.0 / 2010-03-15
==================

22
LICENSE Normal file
View File

@@ -0,0 +1,22 @@
(The MIT License)
Copyright (c) 2009-2011 TJ Holowaychuk <tj@vision-media.ca>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -1,17 +1,35 @@
NODE = node
all: test
DOCS = $(shell find docs/*.md)
HTMLDOCS =$(DOCS:.md=.html)
TESTS = $(shell find test/*.test.js)
test:
@$(NODE) spec/node.js all
app: app-chat
app-chat:
@$(NODE) examples/chat/app.js
app-upload:
@$(NODE) examples/upload/app.js
.PHONY: test app
@NODE_ENV=test ./node_modules/.bin/expresso \
-I lib \
$(TESTFLAGS) \
$(TESTS)
test-cov:
@TESTFLAGS=--cov $(MAKE) test
docs: $(HTMLDOCS)
@ echo "... generating TOC"
@./support/toc.js docs/guide.html
%.html: %.md
@echo "... $< -> $@"
@markdown $< \
| cat docs/layout/head.html - docs/layout/foot.html \
> $@
site:
rm -fr /tmp/docs \
&& cp -fr docs /tmp/docs \
&& git checkout gh-pages \
&& cp -fr /tmp/docs/* . \
&& echo "done"
docclean:
rm -f docs/*.{1,html}
.PHONY: site test test-cov docs docclean

153
Readme.md
View File

@@ -2,90 +2,107 @@
# Express
Insanely fast (and small) server-side JavaScript web development framework
built on **node.js** and the **V8 JavaScript engine**.
* Visit the [Wiki](http://wiki.github.com/visionmedia/express) for documentation
* Visit the [Google Group](http://groups.google.com/group/express-js) for discussion
## Features (so far)
* Sexy DSL with robust sinatra-like routing
* High performance
* Session support
* Mime helpers
* Redirection helpers
* Multipart file upload support
* Test helpers (mock requests etc)
* Environment based configuration
* Light-weight JavaScript class implementation via js-oo
* View support (ejs, haml, sass, etc)
* Full test coverage
* Extremely readable specs
built on [node](http://nodejs.org) and [Connect](http://github.com/senchalabs/connect).
var app = express.createServer();
app.get('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);
## Installation
Install the [Kiwi package manager for nodejs](http://github.com/visionmedia/kiwi)
and run:
$ kiwi -v install express
$ npm install express
## Performance
or to access the `express(1)` executable install globally:
Extensive performance enhancements have not yet been made,
since we are focusing on the framework it-self at the moment.
However if you are interested view the premature [benchmarks for Express framework](http://vision-media.ca/resources/nodejs/express-nodejs-web-development-framework-performance).
$ npm install -g express
## Examples
## Features
Below is a tiny Express application. View the [Wiki](http://wiki.github.com/visionmedia/express/) for detailed information.
* Robust routing
* Redirection helpers
* Dynamic view helpers
* Content negotiation
* Focus on high performance
* View rendering and partials support
* Environment based configuration
* Session based flash notifications
* Built on [Connect](http://github.com/senchalabs/connect)
* High test coverage
* Executable for generating applications quickly
* Application level view options
var kiwi = require('kiwi'),
express = kiwi.require('express')
Via Connect:
get('/hello-world', function(){
this.contentType('html')
return '<h1>Hello World</h1>'
})
* Session support
* Cache API
* Mime helpers
* ETag support
* Persistent flash notifications
* Cookie support
* JSON-RPC
* Logging
* and _much_ more!
run()
## Running Tests
Express uses the [JSpec](http://jspec.info) BDD JavaScript testing
framework to write and run elegant spec suites. JSpec is frozen
to spec/lib and **does not** require separate installation.
$ make test
Run individual suites:
$ node spec/node.js core
$ node spec/node.js mime
$ node spec/node.js routing
...
Express is currently being developed with node --version:
v0.1.32
## More Information
* [JavaScript Extensions &amp; Utilities](http://github.com/visionmedia/ext.js)
* [JavaScript Sass](http://github.com/visionmedia/sass.js)
* Featured in [Advanced JavaScript e-book](http://www.dev-mag.com/2010/02/18/advanced-javascript/) for only $4
## Contributors
* TJ Holowaychuk (visionmedia) &lt;tj@vision-media.ca&gt;
* Aaron Heckmann (aheckmann) &lt;aaron.heckmann+github@gmail.com&gt;
* Ciaran Jessup (ciaranj) &lt;ciaranj@gmail.com&gt;
* Gareth Jones (csausdev) &lt;gareth.jones@sensis.com.au&gt;
The following are the major contributors of Express (in no specific order).
* TJ Holowaychuk ([visionmedia](http://github.com/visionmedia))
* Ciaran Jessup ([ciaranj](http://github.com/ciaranj))
* Aaron Heckmann ([aheckmann](http://github.com/aheckmann))
* Guillermo Rauch ([guille](http://github.com/guille))
## More Information
* [express-expose](http://github.com/visionmedia/express-expose) expose objects, functions, modules and more to client-side js with ease
* [express-configure](http://github.com/visionmedia/express-configuration) async configuration support
* [express-messages](http://github.com/visionmedia/express-messages) flash notification rendering helper
* [express-namespace](http://github.com/visionmedia/express-namespace) namespaced route support
* [express-params](https://github.com/visionmedia/express-params) param pre-condition functions
* [express-mongoose](https://github.com/LearnBoost/express-mongoose) plugin for easy rendering of Mongoose async Query results
* Follow [tjholowaychuk](http://twitter.com/tjholowaychuk) on twitter for updates
* [Google Group](http://groups.google.com/group/express-js) for discussion
* Visit the [Wiki](http://github.com/visionmedia/express/wiki)
* Screencast - [Introduction](http://bit.ly/eRYu0O)
* Screencast - [View Partials](http://bit.ly/dU13Fx)
* Screencast - [Route Specific Middleware](http://bit.ly/hX4IaH)
* Screencast - [Route Path Placeholder Preconditions](http://bit.ly/eNqmVs)
## Node Compatibility
Express 1.x is compatible with node 0.2.x and connect < 1.0.
Express 2.x is compatible with node 0.4.x and connect 1.x
## Viewing Examples
First install the dev dependencies to install all the example / test suite deps:
$ npm install
then run whichever tests you want:
$ node examples/jade/app.js
## Running Tests
To run the test suite first invoke the following command within the repo, installing the development dependencies:
$ npm install
then run the tests:
$ make test
## License
(The MIT License)
Copyright (c) 2009 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
Copyright (c) 2009-2011 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the

447
bin/express Executable file
View File

@@ -0,0 +1,447 @@
#!/usr/bin/env node
/**
* Module dependencies.
*/
var fs = require('fs')
, exec = require('child_process').exec;
/**
* Framework version.
*/
var version = '2.3.8';
/**
* Add session support.
*/
var sessions = false;
/**
* CSS engine to utilize.
*/
var cssEngine;
/**
* Template engine to utilize.
*/
var templateEngine = 'jade';
/**
* Usage documentation.
*/
var usage = ''
+ '\n'
+ ' Usage: express [options] [path]\n'
+ '\n'
+ ' Options:\n'
+ ' -s, --sessions add session support\n'
+ ' -t, --template <engine> add template <engine> support (jade|ejs). default=jade\n'
+ ' -c, --css <engine> add stylesheet <engine> support (less|sass|stylus). default=plain css\n'
+ ' -v, --version output framework version\n'
+ ' -h, --help output help information\n'
;
/**
* Jade layout template.
*/
var jadeLayout = [
'!!!'
, 'html'
, ' head'
, ' title= title'
, ' link(rel=\'stylesheet\', href=\'/stylesheets/style.css\')'
, ' body!= body'
].join('\n');
/**
* Jade index template.
*/
var jadeIndex = [
'h1= title'
, 'p Welcome to #{title}'
].join('\n');
/**
* EJS layout template.
*/
var ejsLayout = [
'<!DOCTYPE html>'
, '<html>'
, ' <head>'
, ' <title><%= title %></title>'
, ' <link rel=\'stylesheet\' href=\'/stylesheets/style.css\' />'
, ' </head>'
, ' <body>'
, ' <%- body %>'
, ' </body>'
, '</html>'
].join('\n');
/**
* EJS index template.
*/
var ejsIndex = [
'<h1><%= title %></h1>'
, '<p>Welcome to <%= title %></p>'
].join('\n');
/**
* Default css template.
*/
var css = [
'body {'
, ' padding: 50px;'
, ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;'
, '}'
, ''
, 'a {'
, ' color: #00B7FF;'
, '}'
].join('\n');
/**
* Default less template.
*/
var less = [
'body {'
, ' padding: 50px;'
, ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;'
, '}'
, ''
, 'a {'
, ' color: #00B7FF;'
, '}'
].join('\n');
/**
* Default sass template.
*/
var sass = [
'body'
, ' :padding 50px'
, ' :font 14px "Lucida Grande", Helvetica, Arial, sans-serif'
, 'a'
, ' :color #00B7FF'
].join('\n');
/**
* Default stylus template.
*/
var stylus = [
'body'
, ' padding 50px'
, ' font 14px "Lucida Grande", Helvetica, Arial, sans-serif'
, 'a'
, ' color #00B7FF'
].join('\n');
/**
* App test template.
*/
var appTest = [
""
, "// Run $ expresso"
, ""
, "/**"
, " * Module dependencies."
, " */"
, ""
, "var app = require('../app')"
, " , assert = require('assert');"
, "",
, "module.exports = {"
, " 'GET /': function(){"
, " assert.response(app,"
, " { url: '/' },"
, " { status: 200, headers: { 'Content-Type': 'text/html; charset=utf-8' }},"
, " function(res){"
, " assert.includes(res.body, '<title>Express</title>');"
, " });"
, " }"
, "};"
].join('\n');
/**
* App template.
*/
var app = [
''
, '/**'
, ' * Module dependencies.'
, ' */'
, ''
, 'var express = require(\'express\');'
, ''
, 'var app = module.exports = express.createServer();'
, ''
, '// Configuration'
, ''
, 'app.configure(function(){'
, ' app.set(\'views\', __dirname + \'/views\');'
, ' app.set(\'view engine\', \':TEMPLATE\');'
, ' app.use(express.bodyParser());'
, ' app.use(express.methodOverride());{sess}{css}'
, ' app.use(app.router);'
, ' app.use(express.static(__dirname + \'/public\'));'
, '});'
, ''
, 'app.configure(\'development\', function(){'
, ' app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); '
, '});'
, ''
, 'app.configure(\'production\', function(){'
, ' app.use(express.errorHandler()); '
, '});'
, ''
, '// Routes'
, ''
, 'app.get(\'/\', function(req, res){'
, ' res.render(\'index\', {'
, ' title: \'Express\''
, ' });'
, '});'
, ''
, 'app.listen(3000);'
, 'console.log("Express server listening on port %d", app.address().port);'
, ''
].join('\n');
// Parse arguments
var args = process.argv.slice(2)
, path = '.';
while (args.length) {
var arg = args.shift();
switch (arg) {
case '-h':
case '--help':
abort(usage);
break;
case '-v':
case '--version':
abort(version);
break;
case '-s':
case '--session':
case '--sessions':
sessions = true;
break;
case '-c':
case '--css':
args.length
? (cssEngine = args.shift())
: abort('--css requires an argument');
break;
case '-t':
case '--template':
args.length
? (templateEngine = args.shift())
: abort('--template requires an argument');
break;
default:
path = arg;
}
}
// Generate application
(function createApplication(path) {
emptyDirectory(path, function(empty){
if (empty) {
createApplicationAt(path);
} else {
confirm('destination is not empty, continue? ', function(ok){
if (ok) {
process.stdin.destroy();
createApplicationAt(path);
} else {
abort('aborting');
}
});
}
});
})(path);
/**
* Create application at the given directory `path`.
*
* @param {String} path
*/
function createApplicationAt(path) {
mkdir(path, function(){
mkdir(path + '/pids');
mkdir(path + '/logs');
mkdir(path + '/public/javascripts');
mkdir(path + '/public/images');
mkdir(path + '/public/stylesheets', function(){
switch (cssEngine) {
case 'stylus':
write(path + '/public/stylesheets/style.styl', stylus);
break;
case 'less':
write(path + '/public/stylesheets/style.less', less);
break;
case 'sass':
write(path + '/public/stylesheets/style.sass', sass);
break;
default:
write(path + '/public/stylesheets/style.css', css);
}
});
mkdir(path + '/views', function(){
switch (templateEngine) {
case 'ejs':
write(path + '/views/layout.ejs', ejsLayout);
write(path + '/views/index.ejs', ejsIndex);
break;
case 'jade':
write(path + '/views/layout.jade', jadeLayout);
write(path + '/views/index.jade', jadeIndex);
break;
}
});
mkdir(path + '/test', function(){
write(path + '/test/app.test.js', appTest);
});
// CSS Engine support
switch (cssEngine) {
case 'sass':
case 'less':
app = app.replace('{css}', '\n app.use(express.compiler({ src: __dirname + \'/public\', enable: [\'' + cssEngine + '\'] }));');
break;
case 'stylus':
app = app.replace('{css}', '\n app.use(require(\'stylus\').middleware({ src: __dirname + \'/public\' }));');
break;
default:
app = app.replace('{css}', '');
}
// Session support
app = app.replace('{sess}', sessions
? '\n app.use(express.cookieParser());\n app.use(express.session({ secret: \'your secret here\' }));'
: '');
// Template support
app = app.replace(':TEMPLATE', templateEngine);
write(path + '/app.js', app);
// Suggestions
process.on('exit', function(){
if (cssEngine) {
console.log(' - make sure you have installed %s: \x1b[33m$ npm install %s\x1b[0m'
, cssEngine
, cssEngine);
}
console.log(' - make sure you have installed %s: \x1b[33m$ npm install %s\x1b[0m'
, templateEngine
, templateEngine);
});
});
}
/**
* Check if the given directory `path` is empty.
*
* @param {String} path
* @param {Function} fn
*/
function emptyDirectory(path, fn) {
fs.readdir(path, function(err, files){
if (err && 'ENOENT' != err.code) throw err;
fn(!files || !files.length);
});
}
/**
* echo str > path.
*
* @param {String} path
* @param {String} str
*/
function write(path, str) {
fs.writeFile(path, str);
console.log(' \x1b[36mcreate\x1b[0m : ' + path);
}
/**
* Prompt confirmation with the given `msg`.
*
* @param {String} msg
* @param {Function} fn
*/
function confirm(msg, fn) {
prompt(msg, function(val){
fn(/^ *y(es)?/i.test(val));
});
}
/**
* Prompt input with the given `msg` and callback `fn`.
*
* @param {String} msg
* @param {Function} fn
*/
function prompt(msg, fn) {
// prompt
if (' ' == msg[msg.length - 1]) {
process.stdout.write(msg);
} else {
console.log(msg);
}
// stdin
process.stdin.setEncoding('ascii');
process.stdin.once('data', function(data){
fn(data);
}).resume();
}
/**
* Mkdir -p.
*
* @param {String} path
* @param {Function} fn
*/
function mkdir(path, fn) {
exec('mkdir -p ' + path, function(err){
if (err) throw err;
console.log(' \x1b[36mcreate\x1b[0m : ' + path);
fn && fn();
});
}
/**
* Exit with the given `str`.
*
* @param {String} str
*/
function abort(str) {
console.error(str);
process.exit(1);
}

245
docs/applications.html Normal file
View File

@@ -0,0 +1,245 @@
<html>
<head>
<title>Express - node web framework</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<style>
#tagline {
margin-left: 75px;
margin-bottom: 30px;
color: rgba(255,255,255,0.7); }
html {
background: #1c1c1c url(images/bg.tile.jpg); }
body {
margin: 0;
padding-bottom: 30px;
font: 14px/1.4 "Helvetica Neue", "Lucida Grande", "Arial";
font-size: 14px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
background: url(images/bg.jpg) 50% 0 no-repeat;
color: #8b8b8b; }
* {
outline: none; }
em {
color: white; }
a img {
border: none !important; }
a {
font-weight: bold;
text-decoration: none;
color: white;
-webkit-transition-property: opacity, -webkit-transform, color, background-color, padding, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
a:hover {
opacity: 0.8; }
h1, h2, h3, h4 {
margin: 45px 0 0 0;
color: white;
text-shadow: 1px 2px 2px rgba(0,0,0,0.6); }
h3 {
font-size: 18px; }
h4 {
margin-left: 10px;
font-size: 14px;
}
pre {
margin: 20px 10px;
padding: 25px 20px;
background: rgba(0,0,0,0.5);
border: 1px solid #323232;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-border-radius: 5px;
-moz-border-radius: 5px; }
code {
font-family: "Helvetica Neue", "Lucida Grande", "Arial"; }
ul {
margin: 15px 0;
padding: 0 0 0 35px; }
ul li {
margin: 0;
padding: 2px 0;
list-style: square; }
ul li ul {
margin: 0;
padding-left: 12px;
}
.man-name, #Express { display:none; }
.sect {
margin-left: 40px; }
img {
margin-left: 20px;
margin-bottom: 15px;
}
#logo {
display: block;
margin-left: 30%;
margin-bottom: 30px;
width: 194px;
height: 51px;
background: url(images/logo.png) 0 0 no-repeat;
text-indent: -99999px; }
#logo:hover {
opacity: 0.7; }
#logo:active {
opacity: 0.3; }
#ribbon {
position: fixed;
top: 0;
right: 0;
z-index: 2; }
#wrapper {
width: 100%;
min-height: 800px;
background: url(images/top.png) 0 0 repeat-x; }
#container {
margin: 0 auto;
padding-top: 80px;
width: 550px; }
#toc {
position: fixed;
top: 0;
left: 0;
margin: 0 0 0 15px;
padding: 15px;
height: 100%;
background: rgba(0,0,0,0.2);
overflow: auto;
border-right: 1px solid rgba(255,255,255,0.05);
}
#toc li {
padding: 0;
list-style: none;
}
#toc li a {
font-size: 11px;
}
#menu {
margin-left: 75px;
padding: 0;
padding-bottom: 30px; }
#menu li {
display: inline;
list-style: none; }
#menu li a {
display: block;
float: left;
margin: 0 2px;
padding: 3px 15px;
background: rgba(0,0,0,0.2);
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-transition-property: opacity, -webkit-transform, color, background-color, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
#menu li a:hover,
#menu li a.active {
background: rgba(0,0,0,0.5); }
#menu li a:active {
background: rgba(0,0,0,0.1);
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.4);
-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.4); }
</style>
<script>
$(function(){
$('.section').hide();
$('.toggle, a.section-title').toggle(function(){
$(this).siblings('ul').fadeIn(300);
return false;
}, function(){
$(this).siblings('ul').fadeOut(300);
return false;
});
});
</script>
</head>
<body>
<a href='http://github.com/visionmedia/express'>
<img alt='Fork me on GitHub' id='ribbon' src='http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png' />
</a>
<div id="wrapper">
<div id="container">
<a href='http://github.com/visionmedia/express' id='logo'>Express</a>
<p id="tagline">
High performance, high class web development for
<a href="http://nodejs.org">Node.js</a>
</p>
<ul id="menu">
<li><a href="index.html">Home</a></li>
<li><a href="guide.html">Guide</a></li>
<li><a href="screencasts.html">Screencasts</a></li>
<li><a href="applications.html">Applications</a></li>
</ul>
<br />
<p><a href="http://learnboost.com">Learnboost</a> is a free online gradebook application, aimed to crush the competition with innovative, realtime, enjoyable features.</p>
<p><a href="http://learnboost.com"><img src="images/apps/learnboost.png" alt="LearnBoost" /></a></p>
<p><a href="http://storify.com">Storify</a> lets you turn what people post on social media websites into compelling stories.</p>
<p><a href="http://storify.com"><img src="images/apps/storify.png" alt="Storify" /></a></p>
<p><a href="http://pakistansurvey.org/">Pakistan Survey</a> by <a href="http://developmentseed.org">Development Seed</a>, provides in-depth agency-specific analysis from regional experts with data from 1,000 interviews across 120 villages in all seven tribal agencies and mapping of 142 reported drone strikes in FATA through July 2010.</p>
<p><a href="http://pakistansurvey.org"><img src="images/apps/developmentseed.png" alt="Pakistan Survey" /></a></p>
<p><a href="http://markup.io">Markup.IO</a> allows you to draw directly on <em>any</em> website, then share with others to share your thoughts.</p>
<p><a href="http://markup.io"><img src="images/apps/markupio.png" alt="Markup.IO" /></a></p>
<p><a href="http://scrabb.ly">Scrabb.ly</a> is a massively multiplayer scrabble game initially created for the <a href="http://nodeknockout.com/">Node Knockout</a> competition.</p>
<p><a href="http://scrabb.ly"><img src="images/apps/scrabbly.png" alt="Online Realtime Scrabble" /></a></p>
<p><a href="http://clickdummy.net/">ClickDummy</a> is a rapid mockup prototyping application for designers and dummies.</p>
<p><a href="http://clickdummy.net"><img src="images/apps/clickdummy.png" alt="Mockup Prototying" /></a></p>
<p><a href="http://nodeknockout.com">Node Knockout</a> organized the first ever node-specific competition with hundreds of contestants.</p>
<p><a href="http://nodeknockout.com"><img src="images/apps/nodeko.png" alt="Node Knockout Competition Express" /></a></p>
<p><a href="http://widescript.com">Widescript</a> is an innovative app that helps you focus and interact with your texts &ndash; on your desktop, your couch or on the go.</p>
<p><a href="http://widescript.com"><img src="images/apps/widescript.png" alt="Widescript" /></a></p>
<p><a href="http://www.e-resistible.co.uk/">e-resistable</a> is an online order takeaway system providing an intuitive way to fill your belly from your computer!</p>
<p><a href="http://www.e-resistible.co.uk"><img src="images/apps/e-resistable.png" alt="Online Takeaway" /></a></p>
<p><a href="http://toptwittertrends.com">Top Twitter Trends</a> utilizes MongoDB, Socket.IO, jQuery and many other exciting libraries to bring you trending tweets in realtime.</p>
<p><a href="http://toptwittertrends.com"><img src="images/apps/toptwittertrends.png" alt="Twitter Trends" /></a></p>
<br />
<p>The applications shown above are not listed in any specific order. To have an application added or removed please contact <a href="http://github.com/visionmedia">TJ Holowaychuk</a>.</p>
</div>
</div>
</body>
</html>

47
docs/applications.md Normal file
View File

@@ -0,0 +1,47 @@
<br />
[Learnboost](http://learnboost.com) is a free online gradebook application, aimed to crush the competition with innovative, realtime, enjoyable features.
[![LearnBoost](images/apps/learnboost.png)](http://learnboost.com)
[Storify](http://storify.com) lets you turn what people post on social media websites into compelling stories.
[![Storify](images/apps/storify.png)](http://storify.com)
[Pakistan Survey](http://pakistansurvey.org/) by [Development Seed](http://developmentseed.org), provides in-depth agency-specific analysis from regional experts with data from 1,000 interviews across 120 villages in all seven tribal agencies and mapping of 142 reported drone strikes in FATA through July 2010.
[![Pakistan Survey](images/apps/developmentseed.png)](http://pakistansurvey.org)
[Markup.IO](http://markup.io) allows you to draw directly on _any_ website, then share with others to share your thoughts.
[![Markup.IO](images/apps/markupio.png)](http://markup.io)
[Scrabb.ly](http://scrabb.ly) is a massively multiplayer scrabble game initially created for the [Node Knockout](http://nodeknockout.com/) competition.
[![Online Realtime Scrabble](images/apps/scrabbly.png)](http://scrabb.ly)
[ClickDummy](http://clickdummy.net/) is a rapid mockup prototyping application for designers and dummies.
[![Mockup Prototying](images/apps/clickdummy.png)](http://clickdummy.net)
[Node Knockout](http://nodeknockout.com) organized the first ever node-specific competition with hundreds of contestants.
[![Node Knockout Competition Express](images/apps/nodeko.png)](http://nodeknockout.com)
[Widescript](http://widescript.com) is an innovative app that helps you focus and interact with your texts - on your desktop, your couch or on the go.
[![Widescript](images/apps/widescript.png)](http://widescript.com)
[e-resistable](http://www.e-resistible.co.uk/) is an online order takeaway system providing an intuitive way to fill your belly from your computer!
[![Online Takeaway](images/apps/e-resistable.png)](http://www.e-resistible.co.uk)
[Top Twitter Trends](http://toptwittertrends.com) utilizes MongoDB, Socket.IO, jQuery and many other exciting libraries to bring you trending tweets in realtime.
[![Twitter Trends](images/apps/toptwittertrends.png)](http://toptwittertrends.com)
<br />
The applications shown above are not listed in any specific order. To have an application added or removed please contact [TJ Holowaychuk](http://github.com/visionmedia).

240
docs/contrib.html Normal file
View File

@@ -0,0 +1,240 @@
<html>
<head>
<title>Express - node web framework</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<style>
#tagline {
margin-left: 75px;
margin-bottom: 30px;
color: rgba(255,255,255,0.7); }
html {
background: #1c1c1c url(images/bg.tile.jpg); }
body {
margin: 0;
padding-bottom: 30px;
font: 14px/1.4 "Helvetica Neue", "Lucida Grande", "Arial";
font-size: 14px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
background: url(images/bg.jpg) 50% 0 no-repeat;
color: #8b8b8b; }
* {
outline: none; }
em {
color: white; }
a img {
border: none !important; }
a {
font-weight: bold;
text-decoration: none;
color: white;
-webkit-transition-property: opacity, -webkit-transform, color, background-color, padding, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
a:hover {
opacity: 0.8; }
h1, h2, h3, h4 {
margin: 45px 0 0 0;
color: white;
text-shadow: 1px 2px 2px rgba(0,0,0,0.6); }
h3 {
font-size: 18px; }
h4 {
margin-left: 10px;
font-size: 14px;
}
pre {
margin: 20px 10px;
padding: 25px 20px;
background: rgba(0,0,0,0.5);
border: 1px solid #323232;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-border-radius: 5px;
-moz-border-radius: 5px; }
code {
font-family: "Helvetica Neue", "Lucida Grande", "Arial"; }
ul {
margin: 15px 0;
padding: 0 0 0 35px; }
ul li {
margin: 0;
padding: 2px 0;
list-style: square; }
ul li ul {
margin: 0;
padding-left: 12px;
}
.man-name, #Express { display:none; }
.sect {
margin-left: 40px; }
img {
margin-left: 20px;
margin-bottom: 15px;
}
#logo {
display: block;
margin-left: 30%;
margin-bottom: 30px;
width: 194px;
height: 51px;
background: url(images/logo.png) 0 0 no-repeat;
text-indent: -99999px; }
#logo:hover {
opacity: 0.7; }
#logo:active {
opacity: 0.3; }
#ribbon {
position: fixed;
top: 0;
right: 0;
z-index: 2; }
#wrapper {
width: 100%;
min-height: 800px;
background: url(images/top.png) 0 0 repeat-x; }
#container {
margin: 0 auto;
padding-top: 80px;
width: 550px; }
#toc {
position: fixed;
top: 0;
left: 0;
margin: 0 0 0 15px;
padding: 15px;
height: 100%;
background: rgba(0,0,0,0.2);
overflow: auto;
border-right: 1px solid rgba(255,255,255,0.05);
}
#toc li {
padding: 0;
list-style: none;
}
#toc li a {
font-size: 11px;
}
#menu {
margin-left: 75px;
padding: 0;
padding-bottom: 30px; }
#menu li {
display: inline;
list-style: none; }
#menu li a {
display: block;
float: left;
margin: 0 2px;
padding: 3px 15px;
background: rgba(0,0,0,0.2);
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-transition-property: opacity, -webkit-transform, color, background-color, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
#menu li a:hover,
#menu li a.active {
background: rgba(0,0,0,0.5); }
#menu li a:active {
background: rgba(0,0,0,0.1);
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.4);
-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.4); }
</style>
<script>
$(function(){
$('.section').hide();
$('.toggle, a.section-title').toggle(function(){
$(this).siblings('ul').fadeIn(300);
return false;
}, function(){
$(this).siblings('ul').fadeOut(300);
return false;
});
});
</script>
</head>
<body>
<a href='http://github.com/visionmedia/express'>
<img alt='Fork me on GitHub' id='ribbon' src='http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png' />
</a>
<div id="wrapper">
<div id="container">
<a href='http://github.com/visionmedia/express' id='logo'>Express</a>
<p id="tagline">
High performance, high class web development for
<a href="http://nodejs.org">Node.js</a>
</p>
<ul id="menu">
<li><a href="index.html">Home</a></li>
<li><a href="guide.html">Guide</a></li>
<li><a href="screencasts.html">Screencasts</a></li>
<li><a href="applications.html">Applications</a></li>
</ul>
<h3>Development Dependencies</h3>
<p>Express development dependencies are stored within the <em>./support</em> directory. To
update them execute:</p>
<pre><code>$ git submodule update --init
</code></pre>
<h3>Running Tests</h3>
<p>Express uses the <a href="http://github.com/visionmedia/expresso">Expresso</a> TDD
framework to write and run elegant test suites extremely fast. To run all test suites
simply execute:</p>
<pre><code>$ make test
</code></pre>
<p>To target specific suites we may specify the files via:</p>
<pre><code>$ make test TESTS=test/view.test.js
</code></pre>
<p>To check test coverage run:</p>
<pre><code>$ make test-cov
</code></pre>
<h3>Contributions</h3>
<p>To accept a contribution, you should follow these guidelines:</p>
<ul>
<li>All tests <em>must</em> pass</li>
<li>Your alterations or additions <em>must</em> include tests</li>
<li>Your commit(s) should be <em>focused</em>, do not commit once for several changes</li>
<li>Do <em>not</em> alter release information such as the <em>version</em>, or <em>History.md</em></li>
<li>Indents are <em>2</em> spaces.</li>
</ul>
<h3>Documentation</h3>
<p>To contribute documentation edit the markdown files in <em>./docs</em>, however
do <em>not</em> run <em>make docs</em>, as they will be re-built and published with each release.</p>
</div>
</div>
</body>
</html>

37
docs/contrib.md Normal file
View File

@@ -0,0 +1,37 @@
### Development Dependencies
First install the dev dependencies by executing the following command in the repo's directory:
$ npm install
### Running Tests
Express uses the [Expresso](http://github.com/visionmedia/expresso) TDD
framework to write and run elegant test suites extremely fast. To run all test suites
simply execute:
$ make test
To target specific suites we may specify the files via:
$ make test TESTS=test/view.test.js
To check test coverage run:
$ make test-cov
### Contributions
To accept a contribution, you should follow these guidelines:
* All tests _must_ pass
* Your alterations or additions _must_ include tests
* Your commit(s) should be _focused_, do not commit once for several changes
* Do _not_ alter release information such as the _version_, or _History.md_
* Indents are _2_ spaces.
### Documentation
To contribute documentation edit the markdown files in _./docs_, however
do _not_ run _make docs_, as they will be re-built and published with each release.

215
docs/executable.html Normal file
View File

@@ -0,0 +1,215 @@
<html>
<head>
<title>Express - node web framework</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<style>
#tagline {
margin-left: 75px;
margin-bottom: 30px;
color: rgba(255,255,255,0.7); }
html {
background: #1c1c1c url(images/bg.tile.jpg); }
body {
margin: 0;
padding-bottom: 30px;
font: 14px/1.4 "Helvetica Neue", "Lucida Grande", "Arial";
font-size: 14px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
background: url(images/bg.jpg) 50% 0 no-repeat;
color: #8b8b8b; }
* {
outline: none; }
em {
color: white; }
a img {
border: none !important; }
a {
font-weight: bold;
text-decoration: none;
color: white;
-webkit-transition-property: opacity, -webkit-transform, color, background-color, padding, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
a:hover {
opacity: 0.8; }
h1, h2, h3, h4 {
margin: 45px 0 0 0;
color: white;
text-shadow: 1px 2px 2px rgba(0,0,0,0.6); }
h3 {
font-size: 18px; }
h4 {
margin-left: 10px;
font-size: 14px;
}
pre {
margin: 20px 10px;
padding: 25px 20px;
background: rgba(0,0,0,0.5);
border: 1px solid #323232;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-border-radius: 5px;
-moz-border-radius: 5px; }
code {
font-family: "Helvetica Neue", "Lucida Grande", "Arial"; }
ul {
margin: 15px 0;
padding: 0 0 0 35px; }
ul li {
margin: 0;
padding: 2px 0;
list-style: square; }
ul li ul {
margin: 0;
padding-left: 12px;
}
.man-name, #Express { display:none; }
.sect {
margin-left: 40px; }
img {
margin-left: 20px;
margin-bottom: 15px;
}
#logo {
display: block;
margin-left: 30%;
margin-bottom: 30px;
width: 194px;
height: 51px;
background: url(images/logo.png) 0 0 no-repeat;
text-indent: -99999px; }
#logo:hover {
opacity: 0.7; }
#logo:active {
opacity: 0.3; }
#ribbon {
position: fixed;
top: 0;
right: 0;
z-index: 2; }
#wrapper {
width: 100%;
min-height: 800px;
background: url(images/top.png) 0 0 repeat-x; }
#container {
margin: 0 auto;
padding-top: 80px;
width: 550px; }
#toc {
position: fixed;
top: 0;
left: 0;
margin: 0 0 0 15px;
padding: 15px;
height: 100%;
background: rgba(0,0,0,0.2);
overflow: auto;
border-right: 1px solid rgba(255,255,255,0.05);
}
#toc li {
padding: 0;
list-style: none;
}
#toc li a {
font-size: 11px;
}
#menu {
margin-left: 75px;
padding: 0;
padding-bottom: 30px; }
#menu li {
display: inline;
list-style: none; }
#menu li a {
display: block;
float: left;
margin: 0 2px;
padding: 3px 15px;
background: rgba(0,0,0,0.2);
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-transition-property: opacity, -webkit-transform, color, background-color, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
#menu li a:hover,
#menu li a.active {
background: rgba(0,0,0,0.5); }
#menu li a:active {
background: rgba(0,0,0,0.1);
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.4);
-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.4); }
</style>
<script>
$(function(){
$('.section').hide();
$('.toggle, a.section-title').toggle(function(){
$(this).siblings('ul').fadeIn(300);
return false;
}, function(){
$(this).siblings('ul').fadeOut(300);
return false;
});
});
</script>
</head>
<body>
<a href='http://github.com/visionmedia/express'>
<img alt='Fork me on GitHub' id='ribbon' src='http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png' />
</a>
<div id="wrapper">
<div id="container">
<a href='http://github.com/visionmedia/express' id='logo'>Express</a>
<p id="tagline">
High performance, high class web development for
<a href="http://nodejs.org">Node.js</a>
</p>
<ul id="menu">
<li><a href="index.html">Home</a></li>
<li><a href="guide.html">Guide</a></li>
<li><a href="screencasts.html">Screencasts</a></li>
<li><a href="applications.html">Applications</a></li>
</ul>
<h2>Synopsis</h2>
<pre><code>express [options] [PATH]
</code></pre>
<h2>Description</h2>
<p>The <em>express</em> executable generates apps at the given <strong>PATH</strong> or the
current working directory. Although Express is not bound to a specific
application structure, this executable creates a maintainable base app.</p>
<h2>Options</h2>
<pre><code> -s, --sessions Add session support
-t, --template ENGINE Add template ENGINE support (jade|ejs). Defaults to jade
-c, --css ENGINE Add stylesheet ENGINE support (less|sass|stylus). Defaults to plain css
-v, --version Output framework version
-h, --help Output help information
</code></pre>
</div>
</div>
</body>
</html>

21
docs/executable.md Normal file
View File

@@ -0,0 +1,21 @@
## Synopsis
express [options] [PATH]
## Description
The _express_ executable generates apps at the given **PATH** or the
current working directory. Although Express is not bound to a specific
application structure, this executable creates a maintainable base app.
## Options
-s, --sessions Add session support
-t, --template ENGINE Add template ENGINE support (jade|ejs). Defaults to jade
-c, --css ENGINE Add stylesheet ENGINE support (less|sass|stylus). Defaults to plain css
-v, --version Output framework version
-h, --help Output help information

1776
docs/guide.html Normal file

File diff suppressed because it is too large Load Diff

1362
docs/guide.md Normal file

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 154 KiB

BIN
docs/images/apps/nodeko.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 200 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 236 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

BIN
docs/images/bg.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
docs/images/bg.tile.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
docs/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

BIN
docs/images/top.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 143 B

260
docs/index.html Normal file
View File

@@ -0,0 +1,260 @@
<html>
<head>
<title>Express - node web framework</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<style>
#tagline {
margin-left: 75px;
margin-bottom: 30px;
color: rgba(255,255,255,0.7); }
html {
background: #1c1c1c url(images/bg.tile.jpg); }
body {
margin: 0;
padding-bottom: 30px;
font: 14px/1.4 "Helvetica Neue", "Lucida Grande", "Arial";
font-size: 14px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
background: url(images/bg.jpg) 50% 0 no-repeat;
color: #8b8b8b; }
* {
outline: none; }
em {
color: white; }
a img {
border: none !important; }
a {
font-weight: bold;
text-decoration: none;
color: white;
-webkit-transition-property: opacity, -webkit-transform, color, background-color, padding, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
a:hover {
opacity: 0.8; }
h1, h2, h3, h4 {
margin: 45px 0 0 0;
color: white;
text-shadow: 1px 2px 2px rgba(0,0,0,0.6); }
h3 {
font-size: 18px; }
h4 {
margin-left: 10px;
font-size: 14px;
}
pre {
margin: 20px 10px;
padding: 25px 20px;
background: rgba(0,0,0,0.5);
border: 1px solid #323232;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-border-radius: 5px;
-moz-border-radius: 5px; }
code {
font-family: "Helvetica Neue", "Lucida Grande", "Arial"; }
ul {
margin: 15px 0;
padding: 0 0 0 35px; }
ul li {
margin: 0;
padding: 2px 0;
list-style: square; }
ul li ul {
margin: 0;
padding-left: 12px;
}
.man-name, #Express { display:none; }
.sect {
margin-left: 40px; }
img {
margin-left: 20px;
margin-bottom: 15px;
}
#logo {
display: block;
margin-left: 30%;
margin-bottom: 30px;
width: 194px;
height: 51px;
background: url(images/logo.png) 0 0 no-repeat;
text-indent: -99999px; }
#logo:hover {
opacity: 0.7; }
#logo:active {
opacity: 0.3; }
#ribbon {
position: fixed;
top: 0;
right: 0;
z-index: 2; }
#wrapper {
width: 100%;
min-height: 800px;
background: url(images/top.png) 0 0 repeat-x; }
#container {
margin: 0 auto;
padding-top: 80px;
width: 550px; }
#toc {
position: fixed;
top: 0;
left: 0;
margin: 0 0 0 15px;
padding: 15px;
height: 100%;
background: rgba(0,0,0,0.2);
overflow: auto;
border-right: 1px solid rgba(255,255,255,0.05);
}
#toc li {
padding: 0;
list-style: none;
}
#toc li a {
font-size: 11px;
}
#menu {
margin-left: 75px;
padding: 0;
padding-bottom: 30px; }
#menu li {
display: inline;
list-style: none; }
#menu li a {
display: block;
float: left;
margin: 0 2px;
padding: 3px 15px;
background: rgba(0,0,0,0.2);
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-transition-property: opacity, -webkit-transform, color, background-color, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
#menu li a:hover,
#menu li a.active {
background: rgba(0,0,0,0.5); }
#menu li a:active {
background: rgba(0,0,0,0.1);
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.4);
-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.4); }
</style>
<script>
$(function(){
$('.section').hide();
$('.toggle, a.section-title').toggle(function(){
$(this).siblings('ul').fadeIn(300);
return false;
}, function(){
$(this).siblings('ul').fadeOut(300);
return false;
});
});
</script>
</head>
<body>
<a href='http://github.com/visionmedia/express'>
<img alt='Fork me on GitHub' id='ribbon' src='http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png' />
</a>
<div id="wrapper">
<div id="container">
<a href='http://github.com/visionmedia/express' id='logo'>Express</a>
<p id="tagline">
High performance, high class web development for
<a href="http://nodejs.org">Node.js</a>
</p>
<ul id="menu">
<li><a href="index.html">Home</a></li>
<li><a href="guide.html">Guide</a></li>
<li><a href="screencasts.html">Screencasts</a></li>
<li><a href="applications.html">Applications</a></li>
</ul>
<pre><code>var app = express.createServer();
app.get('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);
</code></pre>
<h2>Features</h2>
<ul>
<li>Robust routing</li>
<li>Redirection helpers</li>
<li>Dynamic view helpers</li>
<li>Application level view options</li>
<li>Content negotiation</li>
<li>Application mounting</li>
<li>Focus on high performance</li>
<li>View rendering and partials support</li>
<li>Environment based configuration</li>
<li>Session based flash notifications</li>
<li>Built on <a href="http://github.com/senchalabs/connect">Connect</a></li>
<li><a href="executable.html">Executable</a> for generating applications quickly</li>
<li>High test coverage</li>
</ul>
<h2>Contributors</h2>
<p>The following are the major contributors of Express (in no specific order).</p>
<ul>
<li>TJ Holowaychuk (<a href="http://github.com/visionmedia">visionmedia</a>)</li>
<li>Ciaran Jessup (<a href="http://github.com/ciaranj">ciaranj</a>)</li>
<li>Aaron Heckmann (<a href="http://github.com/aheckmann">aheckmann</a>)</li>
<li>Guillermo Rauch (<a href="http://github.com/guille">guille</a>)</li>
</ul>
<h2>Third-Party Modules</h2>
<p>The following modules compliment or extend Express directly:</p>
<ul>
<li><a href="http://github.com/visionmedia/express-resource">express-resource</a> provides resourceful routing</li>
<li><a href="http://github.com/visionmedia/express-messages">express-messages</a> flash message notification rendering</li>
<li><a href="http://github.com/visionmedia/express-configuration">express-configure</a> async configuration support (load settings from redis etc)</li>
<li><a href="http://github.com/visionmedia/express-namespace">express-namespace</a> namespaced routing support</li>
</ul>
<h2>More Information</h2>
<ul>
<li><a href="http://groups.google.com/group/express-js">Google Group</a> for discussion</li>
<li>Follow <a href="http://twitter.com/tjholowaychuk">tjholowaychuk</a> on twitter for updates</li>
<li>View the <a href="http://senchalabs.github.com/connect">Connect</a> documentation</li>
<li>View the <a href="http://wiki.github.com/senchalabs/connect/">Connect Wiki</a> for contrib middleware</li>
<li>View the <a href="http://github.com/visionmedia/express/tree/master/examples/">examples</a></li>
<li>View the <a href="http://github.com/visionmedia/express">source</a></li>
<li>View the <a href="contrib.html">contrib guide</a></li>
</ul>
</div>
</div>
</body>
</html>

52
docs/index.md Normal file
View File

@@ -0,0 +1,52 @@
var app = express.createServer();
app.get('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);
## Features
* Robust routing
* Redirection helpers
* Dynamic view helpers
* Application level view options
* Content negotiation
* Application mounting
* Focus on high performance
* View rendering and partials support
* Environment based configuration
* Session based flash notifications
* Built on [Connect](http://github.com/senchalabs/connect)
* [Executable](executable.html) for generating applications quickly
* High test coverage
## Contributors
The following are the major contributors of Express (in no specific order).
* TJ Holowaychuk ([visionmedia](http://github.com/visionmedia))
* Ciaran Jessup ([ciaranj](http://github.com/ciaranj))
* Aaron Heckmann ([aheckmann](http://github.com/aheckmann))
* Guillermo Rauch ([guille](http://github.com/guille))
## Third-Party Modules
The following modules compliment or extend Express directly:
* [express-resource](http://github.com/visionmedia/express-resource) provides resourceful routing
* [express-messages](http://github.com/visionmedia/express-messages) flash message notification rendering
* [express-configure](http://github.com/visionmedia/express-configuration) async configuration support (load settings from redis etc)
* [express-namespace](http://github.com/visionmedia/express-namespace) namespaced routing support
## More Information
* [Google Group](http://groups.google.com/group/express-js) for discussion
* Follow [tjholowaychuk](http://twitter.com/tjholowaychuk) on twitter for updates
* View the [Connect](http://senchalabs.github.com/connect) documentation
* View the [Connect Wiki](http://wiki.github.com/senchalabs/connect/) for contrib middleware
* View the [examples](http://github.com/visionmedia/express/tree/master/examples/)
* View the [source](http://github.com/visionmedia/express)
* View the [contrib guide](contrib.html)

4
docs/layout/foot.html Normal file
View File

@@ -0,0 +1,4 @@
</div>
</div>
</body>
</html>

192
docs/layout/head.html Normal file
View File

@@ -0,0 +1,192 @@
<html>
<head>
<title>Express - node web framework</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<style>
#tagline {
margin-left: 75px;
margin-bottom: 30px;
color: rgba(255,255,255,0.7); }
html {
background: #1c1c1c url(images/bg.tile.jpg); }
body {
margin: 0;
padding-bottom: 30px;
font: 14px/1.4 "Helvetica Neue", "Lucida Grande", "Arial";
font-size: 14px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
background: url(images/bg.jpg) 50% 0 no-repeat;
color: #8b8b8b; }
* {
outline: none; }
em {
color: white; }
a img {
border: none !important; }
a {
font-weight: bold;
text-decoration: none;
color: white;
-webkit-transition-property: opacity, -webkit-transform, color, background-color, padding, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
a:hover {
opacity: 0.8; }
h1, h2, h3, h4 {
margin: 45px 0 0 0;
color: white;
text-shadow: 1px 2px 2px rgba(0,0,0,0.6); }
h3 {
font-size: 18px; }
h4 {
margin-left: 10px;
font-size: 14px;
}
pre {
margin: 20px 10px;
padding: 25px 20px;
background: rgba(0,0,0,0.5);
border: 1px solid #323232;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-border-radius: 5px;
-moz-border-radius: 5px; }
code {
font-family: "Helvetica Neue", "Lucida Grande", "Arial"; }
ul {
margin: 15px 0;
padding: 0 0 0 35px; }
ul li {
margin: 0;
padding: 2px 0;
list-style: square; }
ul li ul {
margin: 0;
padding-left: 12px;
}
.man-name, #Express { display:none; }
.sect {
margin-left: 40px; }
img {
margin-left: 20px;
margin-bottom: 15px;
}
#logo {
display: block;
margin-left: 30%;
margin-bottom: 30px;
width: 194px;
height: 51px;
background: url(images/logo.png) 0 0 no-repeat;
text-indent: -99999px; }
#logo:hover {
opacity: 0.7; }
#logo:active {
opacity: 0.3; }
#ribbon {
position: fixed;
top: 0;
right: 0;
z-index: 2; }
#wrapper {
width: 100%;
min-height: 800px;
background: url(images/top.png) 0 0 repeat-x; }
#container {
margin: 0 auto;
padding-top: 80px;
width: 550px; }
#toc {
position: fixed;
top: 0;
left: 0;
margin: 0 0 0 15px;
padding: 15px;
height: 100%;
background: rgba(0,0,0,0.2);
overflow: auto;
border-right: 1px solid rgba(255,255,255,0.05);
}
#toc li {
padding: 0;
list-style: none;
}
#toc li a {
font-size: 11px;
}
#menu {
margin-left: 75px;
padding: 0;
padding-bottom: 30px; }
#menu li {
display: inline;
list-style: none; }
#menu li a {
display: block;
float: left;
margin: 0 2px;
padding: 3px 15px;
background: rgba(0,0,0,0.2);
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-transition-property: opacity, -webkit-transform, color, background-color, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
#menu li a:hover,
#menu li a.active {
background: rgba(0,0,0,0.5); }
#menu li a:active {
background: rgba(0,0,0,0.1);
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.4);
-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.4); }
</style>
<script>
$(function(){
$('.section').hide();
$('.toggle, a.section-title').toggle(function(){
$(this).siblings('ul').fadeIn(300);
return false;
}, function(){
$(this).siblings('ul').fadeOut(300);
return false;
});
});
</script>
</head>
<body>
<a href='http://github.com/visionmedia/express'>
<img alt='Fork me on GitHub' id='ribbon' src='http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png' />
</a>
<div id="wrapper">
<div id="container">
<a href='http://github.com/visionmedia/express' id='logo'>Express</a>
<p id="tagline">
High performance, high class web development for
<a href="http://nodejs.org">Node.js</a>
</p>
<ul id="menu">
<li><a href="index.html">Home</a></li>
<li><a href="guide.html">Guide</a></li>
<li><a href="screencasts.html">Screencasts</a></li>
<li><a href="applications.html">Applications</a></li>
</ul>

393
docs/migrate.html Normal file
View File

@@ -0,0 +1,393 @@
<html>
<head>
<title>Express - node web framework</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<style>
#tagline {
margin-left: 75px;
margin-bottom: 30px;
color: rgba(255,255,255,0.7); }
html {
background: #1c1c1c url(images/bg.tile.jpg); }
body {
margin: 0;
padding-bottom: 30px;
font: 14px/1.4 "Helvetica Neue", "Lucida Grande", "Arial";
font-size: 14px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
background: url(images/bg.jpg) 50% 0 no-repeat;
color: #8b8b8b; }
* {
outline: none; }
em {
color: white; }
a img {
border: none !important; }
a {
font-weight: bold;
text-decoration: none;
color: white;
-webkit-transition-property: opacity, -webkit-transform, color, background-color, padding, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
a:hover {
opacity: 0.8; }
h1, h2, h3, h4 {
margin: 45px 0 0 0;
color: white;
text-shadow: 1px 2px 2px rgba(0,0,0,0.6); }
h3 {
font-size: 18px; }
h4 {
margin-left: 10px;
font-size: 14px;
}
pre {
margin: 20px 10px;
padding: 25px 20px;
background: rgba(0,0,0,0.5);
border: 1px solid #323232;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-border-radius: 5px;
-moz-border-radius: 5px; }
code {
font-family: "Helvetica Neue", "Lucida Grande", "Arial"; }
ul {
margin: 15px 0;
padding: 0 0 0 35px; }
ul li {
margin: 0;
padding: 2px 0;
list-style: square; }
ul li ul {
margin: 0;
padding-left: 12px;
}
.man-name, #Express { display:none; }
.sect {
margin-left: 40px; }
img {
margin-left: 20px;
margin-bottom: 15px;
}
#logo {
display: block;
margin-left: 30%;
margin-bottom: 30px;
width: 194px;
height: 51px;
background: url(images/logo.png) 0 0 no-repeat;
text-indent: -99999px; }
#logo:hover {
opacity: 0.7; }
#logo:active {
opacity: 0.3; }
#ribbon {
position: fixed;
top: 0;
right: 0;
z-index: 2; }
#wrapper {
width: 100%;
min-height: 800px;
background: url(images/top.png) 0 0 repeat-x; }
#container {
margin: 0 auto;
padding-top: 80px;
width: 550px; }
#toc {
position: fixed;
top: 0;
left: 0;
margin: 0 0 0 15px;
padding: 15px;
height: 100%;
background: rgba(0,0,0,0.2);
overflow: auto;
border-right: 1px solid rgba(255,255,255,0.05);
}
#toc li {
padding: 0;
list-style: none;
}
#toc li a {
font-size: 11px;
}
#menu {
margin-left: 75px;
padding: 0;
padding-bottom: 30px; }
#menu li {
display: inline;
list-style: none; }
#menu li a {
display: block;
float: left;
margin: 0 2px;
padding: 3px 15px;
background: rgba(0,0,0,0.2);
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-transition-property: opacity, -webkit-transform, color, background-color, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
#menu li a:hover,
#menu li a.active {
background: rgba(0,0,0,0.5); }
#menu li a:active {
background: rgba(0,0,0,0.1);
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.4);
-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.4); }
</style>
<script>
$(function(){
$('.section').hide();
$('.toggle, a.section-title').toggle(function(){
$(this).siblings('ul').fadeIn(300);
return false;
}, function(){
$(this).siblings('ul').fadeOut(300);
return false;
});
});
</script>
</head>
<body>
<a href='http://github.com/visionmedia/express'>
<img alt='Fork me on GitHub' id='ribbon' src='http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png' />
</a>
<div id="wrapper">
<div id="container">
<a href='http://github.com/visionmedia/express' id='logo'>Express</a>
<p id="tagline">
High performance, high class web development for
<a href="http://nodejs.org">Node.js</a>
</p>
<ul id="menu">
<li><a href="index.html">Home</a></li>
<li><a href="guide.html">Guide</a></li>
<li><a href="screencasts.html">Screencasts</a></li>
<li><a href="applications.html">Applications</a></li>
</ul>
<h3>Express 1.x to 2.x Migration</h3>
<h3>HTTPS</h3>
<p> Creating an HTTPS server is simply, simply pass the TLS options to <em>express.createServer()</em>:</p>
<pre><code> var app = express.createServer({
key: ...
, cert: ...
});
app.listen(443);
</code></pre>
<h3>req.header() Referrer</h3>
<p> Previously if anyone was doing something similar to:</p>
<pre><code> req.headers.referrer || req.headers.referer
req.header('Referrer') || req.header('Referer')
</code></pre>
<p> With the new special-case we may now simply use <em>Referrer</em> which will return either if defined:</p>
<pre><code> req.header('Referrer')
</code></pre>
<h3>res.local(name, val)</h3>
<p> Previously all local variables had to be passed to <em>res.render()</em>, or either <em>app.helpers()</em> or <em>app.dynamicHelpers()</em>, now we may do this at the request-level progressively. The <em>res.local()</em> method accepts a <em>name</em> and <em>val</em>, however the locals passed to <em>res.render()</em> will take precedence.</p>
<p> For example we may utilize this feature to create locals in middleware:</p>
<pre><code> function loadUser(req, res, next) {
User.get(req.params.id, function(err, user){
res.local('user', user);
next();
});
}
app.get('/user/:id', loadUser, function(req, res){
res.render('user');
});
</code></pre>
<h3>req.param(name[, defaultValue])</h3>
<p> Previously only <em>name</em> was accepted, so some of you may have been doing the following:</p>
<pre><code> var id = req.param('id') || req.user.id;
</code></pre>
<p> The new <em>defaultValue</em> argument can handle this nicely:</p>
<pre><code> var id = req.param('id', req.user.id);
</code></pre>
<h3>app.helpers() / app.locals()</h3>
<p> <em>app.locals()</em> is now an alias of <em>app.helpers()</em>, as helpers makes more sense for functions.</p>
<h3>req.accepts(type)</h3>
<p> <em>req.accepts()</em> now accepts extensions:</p>
<pre><code> // Accept: text/html
req.accepts('html');
req.accepts('.html');
// =&gt; true
// Accept: text/*; application/json
req.accepts('html');
req.accepts('text/*');
req.accepts('text/plain');
req.accepts('application/json');
// =&gt; true
req.accepts('image/png');
req.accepts('png');
// =&gt; false
</code></pre>
<h3>res.cookie()</h3>
<p> Previously only directly values could be passed, so for example:</p>
<pre><code>res.cookie('rememberme', 'yes', { expires: new Date(Date.now() + 900000) });
</code></pre>
<p>However now we have the alternative <em>maxAge</em> property which may be used to set <em>expires</em> relative to <em>Date.now()</em> in milliseconds, so our example above can now become:</p>
<pre><code>res.cookie('rememberme', 'yes', { maxAge: 900000 });
</code></pre>
<h3>res.download() / res.sendfile()</h3>
<p> Both of these methods now utilize Connect&rsquo;s static file server behind the scenes (actually the previous Express code was ported to Connect 1.0). With this change comes a change to the callback as well. Previously the <em>path</em> and <em>stream</em> were passed, however now only an <em>error</em> is passed, when no error has occurred the callback will be invoked indicating that the file transfer is complete. The callback remains optional:</p>
<pre><code> res.download('/path/to/file');
res.download('/path/to/file', function(err){
if (err) {
console.error(err);
} else {
console.log('transferred');
}
});
</code></pre>
<p> The <em>stream threshold</em> setting was removed.</p>
<h3>res.render()</h3>
<p> Previously locals were passed as a separate key:</p>
<pre><code> res.render('user', { layout: false, locals: { user: user }});
</code></pre>
<p> In Express 2.0 both the locals and the options are one in the same, meaning you cannot have a local variable named <em>layout</em> as it is reserved for express, however this cleans up the API:</p>
<pre><code> res.render('user', { layout: false, user: user });
</code></pre>
<h3>res.partial()</h3>
<p> Express 2.0 adds the <em>res.partial()</em> method, helpful for rendering partial fragments over WebSockets or Ajax requests etc. The API is identical to the <em>partial()</em> calls within views.</p>
<pre><code> // render a collection of comments
res.partial('comment', [comment1, comment2]);
// render a single comment
res.partial('comment', comment);
</code></pre>
<h3>partial() locals</h3>
<p> Both <em>res.partial()</em> and the <em>partial()</em> functions accept an single object consisting of both the options and the locals. Previously with Express 1.x you may pass <em>user</em> to a partial, along with <em>date</em> like so:</p>
<pre><code> partial('user', { object: user, locals: { date: new Date }})
</code></pre>
<p>or perhaps if you preferred not to use the inferred name <em>user</em> you may used a local for this as well:</p>
<pre><code> partial('user', { locals: { user: user, date: new Date }})
</code></pre>
<p> With recent changes to Express 2.x the object passed is now both, so the following is valid for the <em>object</em> option and locals:</p>
<pre><code> partial('user', { object: user, date: new Date })
</code></pre>
<p> Or the following which is equivalent, however the local var name is explicitly set to <em>user</em> instead of deduced from the filename.</p>
<pre><code> partial('user', { user: user, date: new Date })
</code></pre>
<p> When a &ldquo;basic&rdquo; object aka <em>{}</em> or <em>new Object</em> is passed, it is considered options, otherwise it is considered the <em>object</em>. The following are equivalent:</p>
<pre><code> partial('user', user);
partial('user', { object: user });
</code></pre>
<h3>Template Engine Compliance</h3>
<p> To comply with Express previously engines needed the following signature:</p>
<pre><code> engine.render(str, options, function(err){});
</code></pre>
<p> Now they must export a <em>compile()</em> function, returning a function which when called with local variables will render the template. This allows Express to cache the compiled function in memory during production.</p>
<pre><code> var fn = engine.compile(str, options);
fn(locals);
</code></pre>
<h3>View Partial Lookup</h3>
<p> Previously partials were loaded relative to the now removed <em>view partials</em> directory setting, or by default <em>views/partials</em>, now they are relative to the view calling them, read more on <a href="guide.html#View-Lookup">view lookup</a>.</p>
<h3>Mime Types</h3>
<p> Express and Connect now utilize the <em>mime</em> module in npm, so to add more use:</p>
<pre><code> require('mime').define({ 'foo/bar': ['foo', 'bar'] });
</code></pre>
<h3>static() middleware</h3>
<p> Previously named <code>staticProvider()</code>, the now <code>static()</code> middleware takes a single directory path, followed by options.</p>
<pre><code> app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
</code></pre>
<p>Previously when using options the <code>root</code> option would be used for this:</p>
<pre><code> app.use(express.staticProvider({ root: __dirname + '/public', maxAge: oneYear }));
</code></pre>
</div>
</div>
</body>
</html>

177
docs/migrate.md Normal file
View File

@@ -0,0 +1,177 @@
### Express 1.x to 2.x Migration
### HTTPS
Creating an HTTPS server is simply, simply pass the TLS options to _express.createServer()_:
var app = express.createServer({
key: ...
, cert: ...
});
app.listen(443);
### req.header() Referrer
Previously if anyone was doing something similar to:
req.headers.referrer || req.headers.referer
req.header('Referrer') || req.header('Referer')
With the new special-case we may now simply use _Referrer_ which will return either if defined:
req.header('Referrer')
### res.local(name, val)
Previously all local variables had to be passed to _res.render()_, or either _app.helpers()_ or _app.dynamicHelpers()_, now we may do this at the request-level progressively. The _res.local()_ method accepts a _name_ and _val_, however the locals passed to _res.render()_ will take precedence.
For example we may utilize this feature to create locals in middleware:
function loadUser(req, res, next) {
User.get(req.params.id, function(err, user){
res.local('user', user);
next();
});
}
app.get('/user/:id', loadUser, function(req, res){
res.render('user');
});
### req.param(name[, defaultValue])
Previously only _name_ was accepted, so some of you may have been doing the following:
var id = req.param('id') || req.user.id;
The new _defaultValue_ argument can handle this nicely:
var id = req.param('id', req.user.id);
### app.helpers() / app.locals()
_app.locals()_ is now an alias of _app.helpers()_, as helpers makes more sense for functions.
### req.accepts(type)
_req.accepts()_ now accepts extensions:
// Accept: text/html
req.accepts('html');
req.accepts('.html');
// => true
// Accept: text/*; application/json
req.accepts('html');
req.accepts('text/*');
req.accepts('text/plain');
req.accepts('application/json');
// => true
req.accepts('image/png');
req.accepts('png');
// => false
### res.cookie()
Previously only directly values could be passed, so for example:
res.cookie('rememberme', 'yes', { expires: new Date(Date.now() + 900000) });
However now we have the alternative _maxAge_ property which may be used to set _expires_ relative to _Date.now()_ in milliseconds, so our example above can now become:
res.cookie('rememberme', 'yes', { maxAge: 900000 });
### res.download() / res.sendfile()
Both of these methods now utilize Connect's static file server behind the scenes (actually the previous Express code was ported to Connect 1.0). With this change comes a change to the callback as well. Previously the _path_ and _stream_ were passed, however now only an _error_ is passed, when no error has occurred the callback will be invoked indicating that the file transfer is complete. The callback remains optional:
res.download('/path/to/file');
res.download('/path/to/file', function(err){
if (err) {
console.error(err);
} else {
console.log('transferred');
}
});
The _stream threshold_ setting was removed.
### res.render()
Previously locals were passed as a separate key:
res.render('user', { layout: false, locals: { user: user }});
In Express 2.0 both the locals and the options are one in the same, meaning you cannot have a local variable named _layout_ as it is reserved for express, however this cleans up the API:
res.render('user', { layout: false, user: user });
### res.partial()
Express 2.0 adds the _res.partial()_ method, helpful for rendering partial fragments over WebSockets or Ajax requests etc. The API is identical to the _partial()_ calls within views.
// render a collection of comments
res.partial('comment', [comment1, comment2]);
// render a single comment
res.partial('comment', comment);
### partial() locals
Both _res.partial()_ and the _partial()_ functions accept an single object consisting of both the options and the locals. Previously with Express 1.x you may pass _user_ to a partial, along with _date_ like so:
partial('user', { object: user, locals: { date: new Date }})
or perhaps if you preferred not to use the inferred name _user_ you may used a local for this as well:
partial('user', { locals: { user: user, date: new Date }})
With recent changes to Express 2.x the object passed is now both, so the following is valid for the _object_ option and locals:
partial('user', { object: user, date: new Date })
Or the following which is equivalent, however the local var name is explicitly set to _user_ instead of deduced from the filename.
partial('user', { user: user, date: new Date })
When a "basic" object aka _{}_ or _new Object_ is passed, it is considered options, otherwise it is considered the _object_. The following are equivalent:
partial('user', user);
partial('user', { object: user });
### Template Engine Compliance
To comply with Express previously engines needed the following signature:
engine.render(str, options, function(err){});
Now they must export a _compile()_ function, returning a function which when called with local variables will render the template. This allows Express to cache the compiled function in memory during production.
var fn = engine.compile(str, options);
fn(locals);
### View Partial Lookup
Previously partials were loaded relative to the now removed _view partials_ directory setting, or by default _views/partials_, now they are relative to the view calling them, read more on [view lookup](guide.html#View-Lookup).
### Mime Types
Express and Connect now utilize the _mime_ module in npm, so to add more use:
require('mime').define({ 'foo/bar': ['foo', 'bar'] });
### static() middleware
Previously named `staticProvider()`, the now `static()` middleware takes a single directory path, followed by options.
app.use(express.static(__dirname + '/public', { maxAge: oneYear }));
Previously when using options the `root` option would be used for this:
app.use(express.staticProvider({ root: __dirname + '/public', maxAge: oneYear }));

223
docs/screencasts.html Normal file
View File

@@ -0,0 +1,223 @@
<html>
<head>
<title>Express - node web framework</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<style>
#tagline {
margin-left: 75px;
margin-bottom: 30px;
color: rgba(255,255,255,0.7); }
html {
background: #1c1c1c url(images/bg.tile.jpg); }
body {
margin: 0;
padding-bottom: 30px;
font: 14px/1.4 "Helvetica Neue", "Lucida Grande", "Arial";
font-size: 14px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
background: url(images/bg.jpg) 50% 0 no-repeat;
color: #8b8b8b; }
* {
outline: none; }
em {
color: white; }
a img {
border: none !important; }
a {
font-weight: bold;
text-decoration: none;
color: white;
-webkit-transition-property: opacity, -webkit-transform, color, background-color, padding, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
a:hover {
opacity: 0.8; }
h1, h2, h3, h4 {
margin: 45px 0 0 0;
color: white;
text-shadow: 1px 2px 2px rgba(0,0,0,0.6); }
h3 {
font-size: 18px; }
h4 {
margin-left: 10px;
font-size: 14px;
}
pre {
margin: 20px 10px;
padding: 25px 20px;
background: rgba(0,0,0,0.5);
border: 1px solid #323232;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-border-radius: 5px;
-moz-border-radius: 5px; }
code {
font-family: "Helvetica Neue", "Lucida Grande", "Arial"; }
ul {
margin: 15px 0;
padding: 0 0 0 35px; }
ul li {
margin: 0;
padding: 2px 0;
list-style: square; }
ul li ul {
margin: 0;
padding-left: 12px;
}
.man-name, #Express { display:none; }
.sect {
margin-left: 40px; }
img {
margin-left: 20px;
margin-bottom: 15px;
}
#logo {
display: block;
margin-left: 30%;
margin-bottom: 30px;
width: 194px;
height: 51px;
background: url(images/logo.png) 0 0 no-repeat;
text-indent: -99999px; }
#logo:hover {
opacity: 0.7; }
#logo:active {
opacity: 0.3; }
#ribbon {
position: fixed;
top: 0;
right: 0;
z-index: 2; }
#wrapper {
width: 100%;
min-height: 800px;
background: url(images/top.png) 0 0 repeat-x; }
#container {
margin: 0 auto;
padding-top: 80px;
width: 550px; }
#toc {
position: fixed;
top: 0;
left: 0;
margin: 0 0 0 15px;
padding: 15px;
height: 100%;
background: rgba(0,0,0,0.2);
overflow: auto;
border-right: 1px solid rgba(255,255,255,0.05);
}
#toc li {
padding: 0;
list-style: none;
}
#toc li a {
font-size: 11px;
}
#menu {
margin-left: 75px;
padding: 0;
padding-bottom: 30px; }
#menu li {
display: inline;
list-style: none; }
#menu li a {
display: block;
float: left;
margin: 0 2px;
padding: 3px 15px;
background: rgba(0,0,0,0.2);
-webkit-border-radius: 8px;
-moz-border-radius: 8px;
-webkit-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-moz-box-shadow: 1px 2px 2px rgba(0,0,0,0.6);
-webkit-transition-property: opacity, -webkit-transform, color, background-color, -webkit-box-shadow;
-webkit-transition-duration: 0.15s;
-webkit-transition-timing-function: ease-out; }
#menu li a:hover,
#menu li a.active {
background: rgba(0,0,0,0.5); }
#menu li a:active {
background: rgba(0,0,0,0.1);
-webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.4);
-moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.4); }
</style>
<script>
$(function(){
$('.section').hide();
$('.toggle, a.section-title').toggle(function(){
$(this).siblings('ul').fadeIn(300);
return false;
}, function(){
$(this).siblings('ul').fadeOut(300);
return false;
});
});
</script>
</head>
<body>
<a href='http://github.com/visionmedia/express'>
<img alt='Fork me on GitHub' id='ribbon' src='http://s3.amazonaws.com/github/ribbons/forkme_right_white_ffffff.png' />
</a>
<div id="wrapper">
<div id="container">
<a href='http://github.com/visionmedia/express' id='logo'>Express</a>
<p id="tagline">
High performance, high class web development for
<a href="http://nodejs.org">Node.js</a>
</p>
<ul id="menu">
<li><a href="index.html">Home</a></li>
<li><a href="guide.html">Guide</a></li>
<li><a href="screencasts.html">Screencasts</a></li>
<li><a href="applications.html">Applications</a></li>
</ul>
<h3>Introduction</h3>
<p>This introduction screencast covers the basics of Express, and how to get started with your first application.</p>
<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='560' height='345'><param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /><param name='flashvars' value='i=139583' /><param name='allowFullScreen' value='true' /><embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=139583' allowFullScreen='true' width='560' height='345' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object>
<h3>View Partials</h3>
<p>In this screencast we work with partials to display a collection of users using the <a href="http://jade-lang.com">Jade</a> template engine, and learn about view path resolution.</p>
<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='560' height='345'><param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /><param name='flashvars' value='i=139591' /><param name='allowFullScreen' value='true' /><embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=139591' allowFullScreen='true' width='560' height='345' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object>
<h3>Route Specific Middleware</h3>
<p>In the screencast below we learn about the benefits of route-specific middleware.</p>
<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='560' height='345'><param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /><param name='flashvars' value='i=140296' /><param name='allowFullScreen' value='true' /><embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=140296' allowFullScreen='true' width='560' height='345' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object>
<h3>Route Param Preconditions</h3>
<p>Learn about route parameter (<em>/user/:id</em>) pre-conditions, providing automated validation, and loading of data via the named route param segments.</p>
<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='560' height='345'><param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /><param name='flashvars' value='i=140300' /><param name='allowFullScreen' value='true' /><embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=140300' allowFullScreen='true' width='560' height='345' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object>
</div>
</div>
</body>
</html>

24
docs/screencasts.md Normal file
View File

@@ -0,0 +1,24 @@
### Introduction
This introduction screencast covers the basics of Express, and how to get started with your first application.
<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='560' height='345'><param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /><param name='flashvars' value='i=139583' /><param name='allowFullScreen' value='true' /><embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=139583' allowFullScreen='true' width='560' height='345' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object>
### View Partials
In this screencast we work with partials to display a collection of users using the [Jade](http://jade-lang.com) template engine, and learn about view path resolution.
<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='560' height='345'><param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /><param name='flashvars' value='i=139591' /><param name='allowFullScreen' value='true' /><embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=139591' allowFullScreen='true' width='560' height='345' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object>
### Route Specific Middleware
In the screencast below we learn about the benefits of route-specific middleware.
<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='560' height='345'><param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /><param name='flashvars' value='i=140296' /><param name='allowFullScreen' value='true' /><embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=140296' allowFullScreen='true' width='560' height='345' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object>
### Route Param Preconditions
Learn about route parameter (_/user/:id_) pre-conditions, providing automated validation, and loading of data via the named route param segments.
<object classid='clsid:d27cdb6e-ae6d-11cf-96b8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0' width='560' height='345'><param name='movie' value='http://screenr.com/Content/assets/screenr_1116090935.swf' /><param name='flashvars' value='i=140300' /><param name='allowFullScreen' value='true' /><embed src='http://screenr.com/Content/assets/screenr_1116090935.swf' flashvars='i=140300' allowFullScreen='true' width='560' height='345' pluginspage='http://www.macromedia.com/go/getflashplayer'></embed></object>

123
examples/auth/app.js Normal file
View File

@@ -0,0 +1,123 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express')
, crypto = require('crypto');
var app = express.createServer(
express.bodyParser()
, express.cookieParser()
, express.session({ secret: 'keyboard cat' })
);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
// Message helper, ideally we would use req.flash()
// however this is more light-weight for an example
app.dynamicHelpers({
message: function(req){
var err = req.session.error
, msg = req.session.success;
delete req.session.error;
delete req.session.success;
if (err) return '<p class="msg error">' + err + '</p>';
if (msg) return '<p class="msg success">' + msg + '</p>';
}
});
// Generate a salt for the user to prevent rainbow table attacks
var users = {
tj: {
name: 'tj'
, salt: 'randomly-generated-salt'
, pass: md5('foobar' + 'randomly-generated-salt')
}
};
// Used to generate a hash of the plain-text password + salt
function md5(str) {
return crypto.createHash('md5').update(str).digest('hex');
}
// Authenticate using our plain-object database of doom!
function authenticate(name, pass, fn) {
var user = users[name];
// query the db for the given username
if (!user) return fn(new Error('cannot find user'));
// apply the same algorithm to the POSTed password, applying
// the md5 against the pass / salt, if there is a match we
// found the user
if (user.pass == md5(pass + user.salt)) return fn(null, user);
// Otherwise password is invalid
fn(new Error('invalid password'));
}
function restrict(req, res, next) {
if (req.session.user) {
next();
} else {
req.session.error = 'Access denied!';
res.redirect('/login');
}
}
function accessLogger(req, res, next) {
console.log('/restricted accessed by %s', req.session.user.name);
next();
}
app.get('/', function(req, res){
res.redirect('/login');
});
app.get('/restricted', restrict, accessLogger, function(req, res){
res.send('Wahoo! restricted area');
});
app.get('/logout', function(req, res){
// destroy the user's session to log them out
// will be re-created next request
req.session.destroy(function(){
res.redirect('home');
});
});
app.get('/login', function(req, res){
if (req.session.user) {
req.session.success = 'Authenticated as ' + req.session.user.name
+ ' click to <a href="/logout">logout</a>. '
+ ' You may now access <a href="/restricted">/restricted</a>.';
}
res.render('login');
});
app.post('/login', function(req, res){
authenticate(req.body.username, req.body.password, function(err, user){
if (user) {
// Regenerate session when signing in
// to prevent fixation
req.session.regenerate(function(){
// Store the user's primary key
// in the session store to be retrieved,
// or in this case the entire user object
req.session.user = user;
res.redirect('back');
});
} else {
req.session.error = 'Authentication failed, please check your '
+ ' username and password.'
+ ' (use "tj" and "foobar")';
res.redirect('back');
}
});
});
app.listen(3000);
console.log('Express started on port 3000');

View File

@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html>
<head>
<title>Authentication Example</title>
<style>
body {
padding: 50px;
font: 13px Helvetica, Arial, sans-serif;
}
.error {
color: red
}
.success {
color: green;
}
</style>
</head>
<body>
<%- body %>
</body>
</html>

View File

@@ -0,0 +1,16 @@
<h1>Login</h1>
<%- message %>
Try accessing <a href="/restricted">/restricted</a>.
<form method="post" action="/login">
<p>
<label>Username:</label>
<input type="text" name="username">
</p>
<p>
<label>Password:</label>
<input type="text" name="password">
</p>
<p>
<input type="submit" value="Login">
</p>
</form>

58
examples/blog/app.js Normal file
View File

@@ -0,0 +1,58 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express')
, messages = require('express-messages');
var app = module.exports = express.createServer();
// Config
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
// mount hook
app.mounted(function(other){
console.log('ive been mounted!');
});
// Flash message helper provided by express-messages
// $ npm install express-messages
app.dynamicHelpers({
messages: messages
, base: function(){
// return the app's mount-point
// so that urls can adjust. For example
// if you run this example /post/add works
// however if you run the mounting example
// it adjusts to /blog/post/add
return '/' == app.route ? '' : app.route;
}
});
// Middleware
app.configure(function(){
app.use(express.logger('\x1b[33m:method\x1b[0m \x1b[32m:url\x1b[0m :response-time'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser());
app.use(express.session({ secret: 'keyboard cat' }));
app.use(app.router);
app.use(express.static(__dirname + '/public'));
app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});
// Routes
require('./routes/site')(app);
require('./routes/post')(app);
if (!module.parent) {
app.listen(3000);
console.log('Express started on port 3000');
}

View File

@@ -0,0 +1,67 @@
// Fake data store
var ids = 0
, db = {};
var Post = exports = module.exports = function Post(title, body) {
this.id = ++ids;
this.title = title;
this.body = body;
this.createdAt = new Date;
};
Post.prototype.save = function(fn){
db[this.id] = this;
fn();
};
Post.prototype.validate = function(fn){
if (!this.title) return fn(new Error('_title_ required'));
if (!this.body) return fn(new Error('_body_ required'));
if (this.body.length < 10) {
return fn(new Error(
'_body_ should be at least **10** characters long, was only _' + this.title.length + '_'));
}
fn();
};
Post.prototype.update = function(data, fn){
this.updatedAt = new Date;
for (var key in data) {
if (undefined != data[key]) {
this[key] = data[key];
}
}
this.save(fn);
};
Post.prototype.destroy = function(fn){
exports.destroy(this.id, fn);
};
exports.count = function(fn){
fn(null, Object.keys(db).length);
};
exports.all = function(fn){
var arr = Object.keys(db).reduce(function(arr, id){
arr.push(db[id]);
return arr;
}, []);
fn(null, arr);
};
exports.get = function(id, fn){
fn(null, db[id]);
};
exports.destroy = function(id, fn) {
if (db[id]) {
delete db[id];
fn();
} else {
fn(new Error('post ' + id + ' does not exist'));
}
};

View File

@@ -0,0 +1,58 @@
body {
font: 13px "Helvetica Neue", Arial, sans-serif;
color: #111;
padding: 60px 80px;
}
h1, h2 {
color: #c00;
}
a {
color: #c00;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
label {
padding: 6px 0;
display: block;
text-transform: lowercase;
}
textarea,
input {
outline: none;
padding: 5px;
background: #f1f1f1;
border: 1px solid #aaa;
}
textarea:focus,
input:focus {
background: #fff;
}
textarea {
width: 500px;
height: 200px;
}
a.edit {
margin-left: 10px;
font-size: 11px;
font-weight: normal;
}
.date {
font-size: 11px;
}
#messages ul {
padding: 10px;
border: 1px solid;
}
#messages ul li {
list-style: none;
}
#messages ul.info {
color: #2EBBE6;
background: #F7FBFD;
}
#messages ul.error {
color: #E4250C;
background: #FDEAE7;
}

View File

@@ -0,0 +1,95 @@
/**
* Module dependencies.
*/
var basicAuth = require('../../../lib/express').basicAuth
, Post = require('../models/post');
module.exports = function(app){
/**
* Apply basic auth to all post related routes
*/
app.all('/post(/*)?', basicAuth(function(user, pass){
return 'admin' == user && 'express' == pass;
}));
/**
* Map :post to the database, loading
* every time :post is present.
*/
app.param('post', function(req, res, next, id){
Post.get(id, function(err, post){
if (err) return next(err);
if (!post) return next(new Error('failed to load post ' + id));
req.post = post;
next();
});
});
/**
* Add a post.
*/
app.get('/post/add', function(req, res){
res.render('post/form', { post: {}});
});
/**
* Save a post.
*/
app.post('/post', function(req, res){
var data = req.body.post
, post = new Post(data.title, data.body);
post.validate(function(err){
if (err) {
req.flash('error', err.message);
return res.redirect('back');
}
post.save(function(err){
req.flash('info', 'Successfully created post _%s_', post.title);
res.redirect('/post/' + post.id);
});
});
});
/**
* Display the post.
*/
app.get('/post/:post', function(req, res){
res.render('post', { post: req.post });
});
/**
* Display the post edit form.
*/
app.get('/post/:post/edit', function(req, res){
res.render('post/form', { post: req.post });
});
/**
* Update post. Typically a data layer would handle this stuff.
*/
app.put('/post/:post', function(req, res, next){
var post = req.post;
post.validate(function(err){
if (err) {
req.flash('error', err.message);
return res.redirect('back');
}
post.update(req.body.post, function(err){
if (err) return next(err);
req.flash('info', 'Successfully updated post');
res.redirect('back');
});
});
});
};

View File

@@ -0,0 +1,19 @@
/**
* Module dependencies.
*/
var Post = require('../models/post');
module.exports = function(app){
app.get('/', function(req, res){
Post.count(function(err, count){
Post.all(function(err, posts){
res.render('index', {
count: count
, posts: posts
});
});
});
});
};

View File

@@ -0,0 +1,19 @@
h1 Blog
!= messages()
- if (count)
p Display all #{count} post(s)
#posts!= partial('post', posts)
- else
p
| It looks like you have no posts!
p
| Click
a(href=base + '/post/add') here
| to create a post. Login
| as
em "admin"
| and
em "express"
| .

View File

@@ -0,0 +1,7 @@
!!! 5
html
head
title Blog
link(rel='stylesheet', href=base + '/style.css')
body
#container!= body

View File

@@ -0,0 +1,20 @@
- if (post.title)
h1 Editing #{post.title}
- else
h1 New Post
!= messages()
form#post(action=base + '/post' + (post.title ? '/' + post.id : ''), method='post')
- if (post.title)
input(type='hidden', name='_method', value='put')
p
label(for='post[title]') Title:
input(type='text', name='post[title]', value=post.title)
p
label(for='post[body]') Body:
textarea(name='post[body]')= post.body || ''
p
input(type='submit', value=post.title ? 'Update' : 'Create')

View File

@@ -0,0 +1,16 @@
.post
// title
h2
= post.title
a.edit(href=base + '/post/' + post.id + '/edit') Edit
// flash messages
!= messages()
// dates
p.date.created Created at #{post.createdAt}
- if (post.updatedAt)
p.date.updated Updated at #{post.updatedAt}
// body
pre.body= post.body

View File

@@ -1,84 +0,0 @@
require.paths.unshift('lib')
require('express')
require('express/plugins')
var messages = [],
utils = require('express/utils'),
kiwi = require('kiwi')
configure(function(){
var fiveMinutes = 300000,
oneMinute = 60000
kiwi.seed('haml')
kiwi.seed('sass')
use(MethodOverride)
use(ContentLength)
use(Cookie)
use(Cache, { lifetime: fiveMinutes, reapInterval: oneMinute })
use(Session, { lifetime: fiveMinutes, reapInterval: oneMinute })
use(Logger)
set('root', __dirname)
})
get('/', function(){
this.pass('/chat')
})
get('/chat', function(){
this.render('chat.haml.html', {
locals: {
title: 'Chat',
messages: messages,
name: this.session.name,
usersOnline: Session.store.length()
}
})
})
post('/chat', function(){
this.session.name = this.param('name')
messages
.push(utils.escape(this.param('name')) + ': ' + utils.escape(this.param('message'))
.replace(/(http:\/\/[^\s]+)/g, '<a href="$1" target="express-chat">$1</a>')
.replace(/:\)/g, '<img src="http://icons3.iconfinder.netdna-cdn.com/data/icons/ledicons/emoticon_smile.png">'))
this.halt(200)
})
get('/chat/messages', function(){
var self = this,
previousLength = messages.length,
timer = setInterval(function(){
if (messages.length > previousLength)
self.contentType('json'),
previousLength = messages.length,
self.halt(200, JSON.encode(messages)),
clearInterval(timer)
}, 100)
})
get('/public/*', function(file){
this.sendfile(__dirname + '/public/' + file)
})
get('/*.css', function(file){
this.render(file + '.sass.css', { layout: false })
})
get('/error/view', function(){
this.render('does.not.exist')
})
get('/error', function(){
throw new Error('oh noes!')
})
get('/simple', function(){
return 'Hello :)'
})
get('/favicon.ico', function(){
this.halt()
})
run()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

View File

@@ -1,28 +0,0 @@
$(function(){
// Send message
$('form').submit(function(){
var message = $('input[name=message]'),
name = $('input[name=name]')
if (message.val())
$.post('/chat', { name: name.val(), message: message.val() }, function(){
message.val('')
})
else
message.css('border', '1px solid red')
return false
})
// Longpoll
;(function poll(){
$.getJSON('/chat/messages', function(messages){
$('#messages').empty()
$.each(messages, function(i, msg){
$('#messages')
.append('<li>' + msg + '</li>')
.get(0).scrollTop = $('#messages').get(0).scrollHeight
})
poll()
})
})()
})

File diff suppressed because one or more lines are too long

View File

@@ -1,10 +0,0 @@
%h1 Chat
%img.bubble{ src: '/public/images/bubble.png' }
%ul#messages
:each msg in messages
%li= msg
%form{ method: 'post' }
%input{ type: 'hidden', name: '_method', value: 'put' }
%input{ type: 'text', name: 'name', value: name || 'guest' }
%input{ type: 'text', name: 'message' }
%input{ type: 'submit', value: 'Send' }

View File

@@ -1,11 +0,0 @@
%html
%head
%title= title
%script{ src: '/public/javascripts/jquery.js' }
%script{ src: '/public/javascripts/app.js' }
%link{ rel: 'stylesheet', href: '/style.css' }
%body
#wrapper= body
#online
Online:
%strong= usersOnline

View File

@@ -1,81 +0,0 @@
body
:font-family "Helvetica Neue", "Lucida Grande", "Arial"
:font-size 13px
:text-align center
=text-stroke 1px rgba(255, 255, 255, 0.1)
:color #555
h1, h2
:margin 0
:font-size 22px
:color #343434
h1
:text-shadow 1px 2px 2px #ddd
:font-size 60px
img.bubble
:position absolute
:top -25px
:left 120px
#wrapper
:position relative
:margin 100px auto
:width 500px
:text-align left
ul
:margin 0
:padding 0
:max-height 300px
:overflow-x hidden
li
:margin 5px 0
:padding 3px 8px
:list-style none
:border 1px solid #eee
=border-radius 3px
=border-radius 3px
li:hover
:cursor pointer
:color #2E2E2E
input[type=text]
:padding 5px
:border 1px solid #ddd
:outline none
=border-radius 2px
input[type=text]:focus
:border-color #00C3FF
input[type=submit]
=border-radius 2px
=box-shadow 0 1px 2px #ddd
:padding 6px 10px
:border solid 1px #999
:background -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#ddd))
:color #333
:text-decoration none
:cursor pointer
:display inline-block
:text-align center
:text-shadow 0px 1px 1px #fff
:line-height 1
input[type=submit]:hover
:background -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#E6E4E4))
input[type=submit]:active
:background -webkit-gradient(linear, 0% 0%, 0% 100%, from(#fff), to(#c7c7c7))
input[name=name]
:width 80px
a
:color #1ABFF1
=transition-property padding
=transition-duration 0.15s
a:hover
:padding 0 5px
a:hover:before
:content 'visit: '
#online
:font-size 12px

46
examples/cookies/app.js Normal file
View File

@@ -0,0 +1,46 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
var app = express.createServer(
// Place default Connect favicon above logger so it is not in
// the logging output
express.favicon(),
// Custom logger format
express.logger({ format: '\x1b[1m:method\x1b[0m \x1b[33m:url\x1b[0m :response-time' }),
// Provides req.cookies
express.cookieParser(),
// Parses x-www-form-urlencoded request bodies (and json)
express.bodyParser()
);
app.get('/', function(req, res){
if (req.cookies.remember) {
res.send('Remembered :). Click to <a href="/forget">forget</a>!.');
} else {
res.send('<form method="post"><p>Check to <label>'
+ '<input type="checkbox" name="remember"/> remember me</label> '
+ '<input type="submit" value="Submit"/>.</p></form>');
}
});
app.get('/forget', function(req, res){
res.clearCookie('remember');
res.redirect('back');
});
app.post('/', function(req, res){
if (req.body.remember) {
res.cookie('remember', '1', { path: '/', expires: new Date(Date.now() + 900000), httpOnly: true });
}
res.redirect('back');
});
app.listen(3000);
console.log('Express started on port 3000');

51
examples/downloads/app.js Normal file
View File

@@ -0,0 +1,51 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
var app = express.createServer();
app.get('/', function(req, res){
res.send('<ul>'
+ '<li>Download <a href="/files/amazing.txt">amazing.txt</a>.</li>'
+ '<li>Download <a href="/files/missing.txt">missing.txt</a>.</li>'
+ '</ul>');
});
// /files/* is accessed via req.params[0]
// but here we name it :file
app.get('/files/:file(*)', function(req, res, next){
var file = req.params.file
, path = __dirname + '/files/' + file;
// either res.download(path) and let
// express handle failures, or provide
// a callback as shown below
res.download(path, function(err){
// if an error occurs in this callback
// the file most likely does not exist,
// and it's safe to respond or next(err)
if (err) return next(err);
// the file has been transferred, do not respond
// from here, though you may use this callback
// for stats etc.
console.log('transferred %s', path);
}, function(err){
// this second optional callback is used when
// an error occurs during transmission
});
});
app.error(function(err, req, res, next){
if ('ENOENT' == err.code) {
res.send('Cant find that file, sorry!');
} else {
// Not a 404
next(err);
}
});
app.listen(3000);
console.log('Express started on port 3000');

View File

@@ -0,0 +1 @@
what an amazing download

31
examples/ejs/app.js Normal file
View File

@@ -0,0 +1,31 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
var app = express.createServer();
// Register ejs as .html
app.register('.html', require('ejs'));
// Optional since express defaults to CWD/views
app.set('views', __dirname + '/views');
app.set('view engine', 'html');
// Dummy users
var users = [
{ name: 'tj', email: 'tj@sencha.com' }
, { name: 'ciaran', email: 'ciaranj@gmail.com' }
, { name: 'aaron', email: 'aaron.heckmann+github@gmail.com' }
];
app.get('/', function(req, res){
res.render('users', { users: users });
});
app.listen(3000);
console.log('Express app started on port 3000');

View File

@@ -0,0 +1,6 @@
<html>
<body>
<h1>Users</h1>
<%- body %>
</body>
</html>

View File

@@ -0,0 +1,3 @@
<ul id="users">
<%- partial('user', users) %>
</ul>

View File

@@ -0,0 +1 @@
<li><%= user.name %> &lt;<%= user.email %>&gt;</li>

View File

@@ -0,0 +1,96 @@
// Expose modules in ./support for demo purposes
require.paths.unshift(__dirname + '/../../support');
/**
* Module dependencies.
*/
var express = require('../../lib/express');
var app = express.createServer();
// Serve default connect favicon
app.use(express.favicon());
// Logger is placed below favicon, so favicon.ico
// requests will not be logged
app.use(express.logger({ format: '":method :url" :status' }));
// "app.router" positions our routes
// specifically above the middleware
// assigned below
app.use(app.router);
// When no more middleware require execution, aka
// our router is finished and did not respond, we
// can assume that it is "not found". Instead of
// letting Connect deal with this, we define our
// custom middleware here to simply pass a NotFound
// exception
app.use(function(req, res, next){
next(new NotFound(req.url));
});
app.set('views', __dirname + '/views');
// Provide our app with the notion of NotFound exceptions
function NotFound(path){
this.name = 'NotFound';
if (path) {
Error.call(this, 'Cannot find ' + path);
this.path = path;
} else {
Error.call(this, 'Not Found');
}
Error.captureStackTrace(this, arguments.callee);
}
/**
* Inherit from `Error.prototype`.
*/
NotFound.prototype.__proto__ = Error.prototype;
// We can call app.error() several times as shown below.
// Here we check for an instanceof NotFound and show the
// 404 page, or we pass on to the next error handler.
// These handlers could potentially be defined within
// configure() blocks to provide introspection when
// in the development environment.
app.error(function(err, req, res, next){
if (err instanceof NotFound) {
res.render('404.jade', { status: 404, error: err });
} else {
next(err);
}
});
// Here we assume all errors as 500 for the simplicity of
// this demo, however you can choose whatever you like
app.error(function(err, req, res){
res.render('500.jade', { status: 500, error: err });
});
// Routes
app.get('/', function(req, res){
res.render('index.jade');
});
app.get('/404', function(req, res){
throw new NotFound(req.url);
});
app.get('/500', function(req, res, next){
next(new Error('keyboard cat!'));
});
app.listen(3000);
console.log('Express app started on port 3000');

View File

@@ -0,0 +1,4 @@
- if (error.path)
h2 Cannot find #{error.path}
- else
h2 Page Not Found

View File

@@ -0,0 +1,2 @@
h1 Error: #{error.message}
pre= error.stack

View File

@@ -0,0 +1,8 @@
h2 Pages Example
ul
li
| visit
a(href="/500") 500
li
| visit
a(href="/404") 404

View File

@@ -0,0 +1,6 @@
html
head
title Custom Pages Example
body
h1 My Site
!= body

26
examples/error/app.js Normal file
View File

@@ -0,0 +1,26 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
var app = express.createServer();
app.get('/', function(req, res){
// Caught and passed down to the errorHandler middleware
throw new Error('something broke!');
});
app.get('/next', function(req, res, next){
// We can also pass exceptions to next()
next(new Error('oh no!'))
});
// The errorHandler middleware in this case will dump exceptions to stderr
// as well as show the stack trace in responses, currently handles text/plain,
// text/html, and application/json responses to aid in development
app.use('/', express.errorHandler({ dump: true, stack: true }));
app.listen(3000);
console.log('app listening on port 3000');

46
examples/flash/app.js Normal file
View File

@@ -0,0 +1,46 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
// App with session support
var app = express.createServer(
express.cookieParser()
, express.session({ secret: 'keyboard cat' })
);
// View settings
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.dynamicHelpers({
// express-messages is a dynamicHelper that
// renders the flash messages to HTML for you
// $ npm install express-messages
messages: require('express-messages')
});
app.dynamicHelpers({
// Another dynamic helper example. Since dynamic
// helpers resolve at view rendering time, we can
// "inject" the "page" local variable per request
// providing us with the request url.
page: function(req, res){
return req.url;
}
});
app.get('/', function(req, res){
// Not very realistic notifications but illustrates usage
req.flash('info', 'email queued');
req.flash('info', 'email sent');
req.flash('error', 'delivery failed');
res.render('index');
});
app.listen(3000);
console.log('Express app started on port 3000');

View File

@@ -0,0 +1,3 @@
<h1>Flash Message Example</h1>
<p>on page <%- page %></p>
<%- messages() %>

View File

@@ -0,0 +1,5 @@
<html>
<body>
<%- body %>
</body>
</html>

81
examples/form/app.js Normal file
View File

@@ -0,0 +1,81 @@
// Expose modules in ./support for demo purposes
require.paths.unshift(__dirname + '/../../support');
/**
* Module dependencies.
*/
var express = require('../../lib/express');
var app = express.createServer();
// Here we use the bodyDecoder middleware
// to parse urlencoded request bodies
// which populates req.body
app.use(express.bodyParser());
// The methodOverride middleware allows us
// to set a hidden input of _method to an arbitrary
// HTTP method to support app.put(), app.del() etc
app.use(express.methodOverride());
// Required by session
app.use(express.cookieParser());
// Required by req.flash() for persistent
// notifications
app.use(express.session({ secret: 'keyboard cat' }));
app.get('/', function(req, res){
// get ?name=foo
var name = req.param('name') || '';
// Switch the button label based if we have a name
var label = name ? 'Update' : 'Save';
// Buffer all flash messages.
// Typically this would all be done in a template
// however for illustration purposes we iterate
// here.
// The messages in req.flash() persist until called,
// at which time they are flushed from the session
var msgs = '<ul>',
flash = req.flash();
Object.keys(flash).forEach(function(type){
flash[type].forEach(function(msg){
msgs += '<li class="' + type + '">' + msg + '</li>';
});
});
msgs += '</ul>';
// If we have a name, we are updating,
// so add the hidden _method input
res.send(msgs
+ '<form method="post">'
+ (name ? '<input type="hidden" value="put" name="_method" />' : '')
+ 'Name: <input type="text" name="name" value="' + name + '" />'
+ '<input type="submit" value="' + label + '" />'
+ '</form>');
});
app.post('/', function(req, res){
if (req.body.name) {
// Typically here we would create a resource
req.flash('info', 'Saved ' + req.body.name);
res.redirect('/?name=' + req.body.name);
} else {
req.flash('error', 'Error: name required');
res.redirect('/');
}
});
app.put('/', function(req, res){
// Typically here we would update a resource
req.flash('info', 'Updated ' + req.body.name);
res.redirect('/?name=' + req.body.name);
});
app.listen(3000);
console.log('Express app started on port 3000');

68
examples/format/app.js Normal file
View File

@@ -0,0 +1,68 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
var app = express.createServer();
// Fake items
var items = [
{ name: 'foo' }
, { name: 'bar' }
, { name: 'baz' }
];
// Routes
app.get('/', function(req, res, next){
res.statusCode = 200;
res.setHeader('Content-Type', 'text/html');
res.write('<p>Visit /item/2</p>');
res.write('<p>Visit /item/2.json</p>');
res.write('<p>Visit /item/2.xml</p>');
res.end();
});
app.get('/item/:id.:format?', function(req, res, next){
var id = req.params.id
, format = req.params.format
, item = items[id];
// Ensure item exists
if (item) {
// Serve the format
switch (format) {
case 'json':
// Detects json
res.send(item);
break;
case 'xml':
// Set contentType as xml then sends
// the string
var xml = ''
+ '<items>'
+ '<item>' + item.name + '</item>'
+ '</items>';
res.contentType('.xml');
res.send(xml);
break;
case 'html':
default:
// By default send some hmtl
res.send('<h1>' + item.name + '</h1>');
}
} else {
// We could simply pass route control and potentially 404
// by calling next(), or pass an exception like below.
next(new Error('Item ' + id + ' does not exist'));
}
});
// Middleware
app.use(express.errorHandler({ showStack: true }));
app.listen(3000);
console.log('Express app started on port 3000');

113
examples/github/app.js Normal file
View File

@@ -0,0 +1,113 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express')
, http = require('http');
var app = express.createServer();
// Expose our views
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
/**
* Request github json api `path`.
*
* @param {String} path
* @param {Function} fn
* @api public
*/
function request(path, fn){
var client = http.createClient(80, 'github.com')
, req = client.request('GET', '/api/v2/json' + path, { Host: 'github.com' });
req.on('response', function(res){
res.body = '';
res.on('data', function(chunk){ res.body += chunk; });
res.on('end', function(){
try {
fn(null, JSON.parse(res.body));
} catch (err) {
fn(err);
}
});
});
req.end();
}
/**
* Sort repositories by watchers desc.
*
* @param {Array} repos
* @api public
*/
function sort(repos){
return repos.sort(function(a, b){
if (a.watchers == b.watchers) return 0;
if (a.watchers > b.watchers) return -1;
if (a.watchers < b.watchers) return 1;
});
}
/**
* Tally up total watchers.
*
* @param {Array} repos
* @return {Number}
* @api public
*/
function totalWatchers(repos) {
return repos.reduce(function(sum, repo){
return sum + repo.watchers;
}, 0);
}
/**
* Default to my user name :)
*/
app.get('/', function(req, res){
res.redirect('/repos/visionmedia');
});
/**
* Display repos.
*/
app.get('/repos/*', function(req, res, next){
var names = req.params[0].split('/')
, users = [];
(function fetchData(name){
// We have a user name
if (name) {
console.log('... fetching \x1b[33m%s\x1b[0m', name);
request('/repos/show/' + name, function(err, user){
if (err) {
next(err)
} else {
user.totalWatchers = totalWatchers(user.repositories);
user.repos = sort(user.repositories);
user.name = name;
users.push(user);
fetchData(names.shift());
}
});
// No more users
} else {
console.log('... done');
res.render('index', { users: users });
}
})(names.shift());
});
// Serve statics from ./public
app.use(express.static(__dirname + '/public'));
// Listen on port 3000
app.listen(3000);
console.log('Express app started on port 3000');

View File

@@ -0,0 +1,19 @@
body {
padding: 30px 50px;
font: 12px/1.4 "Helvetica Neue", Arial, sans-serif;
}
a {
color: #00AAFF;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
.user {
margin: 0 10px;
float: left;
width: 300px;
}
table td:nth-child(2) {
padding: 0 5px;
}

View File

@@ -0,0 +1,8 @@
- each user in users
.user
h2= user.name
p.summary
| <a href="http://github.com/#{user.name}">#{user.name}</a> has
| <strong>#{user.repos.length}</strong> repositories
| with a total of <strong>#{user.totalWatchers}</strong> watchers.
table#repos!= partial('repo', user.repos)

View File

@@ -0,0 +1,7 @@
!!!
html
head
title Github Example
link(rel="stylesheet", href="/style.css")
body
#container!= body

View File

@@ -0,0 +1,5 @@
tr.repo
td.name
a(href: repo.homepage || repo.url)= repo.name
td.watchers
= repo.watchers

View File

@@ -0,0 +1,14 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
var app = express.createServer();
app.get('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);

74
examples/jade/app.js Normal file
View File

@@ -0,0 +1,74 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
// Path to our public directory
var pub = __dirname + '/public';
// Auto-compile sass to css with "compiler"
// and then serve with connect's staticProvider
var app = express.createServer();
app.use(express.compiler({ src: pub, enable: ['sass'] }));
app.use(app.router);
app.use(express.static(pub));
app.use(express.errorHandler({ dump: true, stack: true }));
// Optional since express defaults to CWD/views
app.set('views', __dirname + '/views');
// Set our default template engine to "jade"
// which prevents the need for extensions
// (although you can still mix and match)
app.set('view engine', 'jade');
function User(name, email) {
this.name = name;
this.email = email;
}
// Dummy users
var users = [
new User('tj', 'tj@vision-media.ca')
, new User('ciaran', 'ciaranj@gmail.com')
, new User('aaron', 'aaron.heckmann+github@gmail.com')
];
app.get('/', function(req, res){
res.render('users', { users: users });
});
app.get('/users/callback', function(req, res){
// a callback is also accepted
res.partial('users/user', users, function(err, html){
if (err) throw err;
res.send(html);
});
});
app.get('/users', function(req, res){
// we can use res.partial() as if
// we were in a view, utilizing the same api
// to render a fragment
res.partial('users/user', users);
});
app.get('/users/list', function(req, res){
// use "object" to utilize the name deduced from
// the view filename. The examples below are equivalent
//res.partial('users/list', { object: users });
res.partial('users/list', { list: users });
});
app.get('/user/:id', function(req, res){
res.partial('users/user', users[req.params.id]);
});
app.listen(3000);
console.log('Express app started on port 3000');

View File

@@ -0,0 +1,3 @@
body {
padding: 50px 80px;
font: 14px "Helvetica Nueue", "Lucida Grande", Arial, sans-serif;}

View File

@@ -0,0 +1,3 @@
body
:padding 50px 80px
:font 14px "Helvetica Nueue", "Lucida Grande", Arial, sans-serif

View File

@@ -0,0 +1,6 @@
!!!
html
head
title Jade Example
link(rel="stylesheet", href="/stylesheets/style.css")
body!= body

View File

@@ -0,0 +1,3 @@
- if (users.length)
h1 Users
#users!= partial('user', users)

View File

@@ -0,0 +1,3 @@
ul#users
- each user in list
li!= partial('user', user)

View File

@@ -0,0 +1,3 @@
.user
h2= user.name
.email= user.email

View File

@@ -0,0 +1,32 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
var app = express.createServer();
app.set('views', __dirname + '/views');
// set default layout, usually "layout"
app.set('view options', { layout: 'layouts/default' });
// Set our default template engine to "ejs"
// which prevents the need for extensions
// (although you can still mix and match)
app.set('view engine', 'ejs');
app.get('/', function(req, res){
res.render('pages/default');
});
app.get('/alternate', function(req, res){
// note that we do not explicitly
// state the layout here, the view does,
// although we could do it here as well.
res.render('pages/alternate');
});
app.listen(3000);
console.log('Express app started on port 3000');

View File

@@ -0,0 +1,6 @@
<html>
<body>
<h1>Alternate Layout</h1>
<%- body %>
</body>
</html>

View File

@@ -0,0 +1,6 @@
<html>
<body>
<h1>Default Layout</h1>
<%- body %>
</body>
</html>

View File

@@ -0,0 +1,2 @@
<% layout('layouts/alternate') %>
<h1>Page</h1>

View File

@@ -0,0 +1 @@
<h1>Page</h1>

36
examples/markdown/app.js Normal file
View File

@@ -0,0 +1,36 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express')
, md = require('node-markdown').Markdown;
var app = express.createServer();
// register .md so that markdown may comply
// with the express view system by implementing
// a .compile() method
app.register('.md', {
compile: function(str, options){
var html = md(str);
return function(locals){
return html.replace(/\{([^}]+)\}/g, function(_, name){
return locals[name];
});
};
}
});
// Optional since express defaults to CWD/views
app.set('views', __dirname + '/views');
app.set('view engine', 'md');
app.get('/', function(req, res){
res.render('index', { layout: false, title: 'Markdown Example' });
});
app.listen(3000);
console.log('Express app started on port 3000');

View File

@@ -0,0 +1,4 @@
# {title}
Just an example view rendered with _markdown_.

24
examples/mounting/app.js Normal file
View File

@@ -0,0 +1,24 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express')
, blog = require('../blog/app');
var app = express.createServer();
app.use(express.cookieParser());
app.use(express.session({ secret: 'keyboard cat' }));
// mount the blog. the blog app is written using the "base"
// local variable, allowing it's urls to adjust to wherever
// we wish to mount it.
app.use('/blog', blog);
app.get('/', function(req, res){
res.send('Visit <a href="/blog">/blog</a>');
});
app.listen(3000);
console.log('Server listening on port 3000');

48
examples/multipart/app.js Normal file
View File

@@ -0,0 +1,48 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express')
, form = require('connect-form');
var app = express.createServer(
// connect-form (http://github.com/visionmedia/connect-form)
// middleware uses the formidable middleware to parse urlencoded
// and multipart form data
form({ keepExtensions: true })
);
app.get('/', function(req, res){
res.send('<form method="post" enctype="multipart/form-data">'
+ '<p>Image: <input type="file" name="image" /></p>'
+ '<p><input type="submit" value="Upload" /></p>'
+ '</form>');
});
app.post('/', function(req, res, next){
// connect-form adds the req.form object
// we can (optionally) define onComplete, passing
// the exception (if any) fields parsed, and files parsed
req.form.complete(function(err, fields, files){
if (err) {
next(err);
} else {
console.log('\nuploaded %s to %s'
, files.image.filename
, files.image.path);
res.redirect('back');
}
});
// We can add listeners for several form
// events such as "progress"
req.form.on('progress', function(bytesReceived, bytesExpected){
var percent = (bytesReceived / bytesExpected * 100) | 0;
process.stdout.write('Uploading: %' + percent + '\r');
});
});
app.listen(3000);
console.log('Express app started on port 3000');

13
examples/mvc/app.js Normal file
View File

@@ -0,0 +1,13 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
var app = express.createServer();
require('./mvc').boot(app);
app.listen(3000);
console.log('Express app started on port 3000');

View File

@@ -0,0 +1,9 @@
module.exports = {
// /
index: function(req, res){
res.render();
}
};

Some files were not shown because too many files have changed in this diff Show More