Compare commits

...

1225 Commits

Author SHA1 Message Date
Wes Todd
084e36506a 4.19.0 2024-03-20 10:18:54 -05:00
FDrag0n
0867302ddb Prevent open redirect allow list bypass due to encodeurl
Co-authored-by: Jon Church <me@jonchurch.com>
2024-03-20 10:18:54 -05:00
Rand McKinney
567c9c665d Add note on how to update docs for new release (#5541)
* Update Release-Process.md

Add note about updating docs.

* Update Release-Process.md

* Update Release-Process.md
2024-03-16 11:57:42 -06:00
Rich Hodgkins
69a4cf2819 deps: cookie@0.6.0
closes #5404
2024-03-15 10:27:45 -05:00
Wes Todd
4ee853e837 docs: loosen TC activity rules 2024-03-14 12:43:12 +01:00
Wes Todd
414854b82e docs: nominating @wesleytodd to be project captian 2024-03-14 12:40:52 +01:00
Ulises Gascón
06c6b88808 docs: update release date 2024-03-11 16:19:21 +01:00
Ulises Gascón
1b51edac7c 4.18.3 2024-02-26 20:20:53 +01:00
Ulises Gascón
b625132864 build: pin Node 21.x to minor
Co-authored-by: Aravind Nair <22199259+aravindvnair99@users.noreply.github.com>
closes #5430
2024-02-26 20:08:10 +01:00
Ulises Gascón
e3eca80584 build: pin Node 21.x to minor
Co-authored-by: Aravind Nair <22199259+aravindvnair99@users.noreply.github.com>
2024-02-26 20:07:59 +01:00
Ulises Gascon
23b44b3ddd build: support Node.js 21.6.2 2024-02-26 20:07:27 +01:00
Ulises Gascon
b9fea12245 build: support Node.js 21.x in appveyor 2024-02-26 20:06:49 +01:00
Ulises Gascon
c259c3407f build: support Node.js 21.x 2024-02-26 20:05:58 +01:00
Ulises Gascon
fdeb1d3176 build: support Node.js 20.x in appveyor
closes #5429
2024-02-26 19:57:01 +01:00
Ulises Gascón
734b281900 build: support Node.js 20.x 2024-02-26 19:41:28 +01:00
Dmitry Kondar
0e3ab6ec21 examples: improve view count in cookie-sessions
closes #5414
2024-02-19 16:47:26 -05:00
Ulises Gascon
59af63ac2e build: Node.js@18.19
closes #5490
2024-02-19 14:18:24 -05:00
Ulises Gascon
e720c5a21b docs: add documentation for benchmarks
closes #5312
2024-02-19 12:04:49 -05:00
riddlew
3abea7f818 examples: remove multipart example
Closes #5193
closes #5195
2024-02-19 10:04:05 -05:00
christof louw
2a89eb5c74 tests: fix handling multiple callbacks
closes #5233
2024-02-19 08:20:39 -05:00
Gireesh Punathil
59aae7686b docs: add project captains to contribution
closes #4210
closes #5484
2024-02-18 12:21:22 -06:00
Wes Todd
c4fe7de7bc docs: update TC governance rules
closes #5483
2024-02-18 22:04:47 -05:00
Douglas Christopher Wilson
a22920707b build: actions/checkout@v4 2023-11-01 22:08:37 -04:00
Douglas Christopher Wilson
02d1c3916e build: Node.js@19.9 2023-08-23 20:07:50 -04:00
Douglas Christopher Wilson
8d8bfaac7b build: Node.js@18.17 2023-08-23 19:58:41 -04:00
Douglas Christopher Wilson
13df1de857 build: eslint@8.47.0 2023-08-23 19:49:36 -04:00
Raz Luvaton
2a00da2067 tests: use random port in listen test
closes #5162
2023-06-04 11:47:20 -04:00
Douglas Christopher Wilson
24e4a2570d build: Node.js@16.20 2023-04-06 20:43:53 -04:00
Douglas Christopher Wilson
91b6fb83b4 build: use nyc@14.1.1 for Node.js < 10 2023-04-06 20:40:27 -04:00
Rakesh Bisht
3531987844 lint: remove unused function arguments in Route tests
closes #5137
2023-05-15 21:53:48 -04:00
Douglas Christopher Wilson
f540c3b019 build: Node.js@18.15 2023-03-13 22:59:15 -04:00
Douglas Christopher Wilson
b8b2eff3c3 build: eslint@8.36.0 2023-03-13 22:52:34 -04:00
Douglas Christopher Wilson
f4e48bc43e build: ejs@3.1.9 2023-03-13 22:49:54 -04:00
Douglas Christopher Wilson
8c24fa8f7b tests: wait for server close in app.listen() 2023-03-13 22:43:19 -04:00
Douglas Christopher Wilson
0debedf4f3 build: fix code coverage aggregate upload 2023-02-26 13:34:32 -05:00
Douglas Christopher Wilson
74beeac071 Fix routing requests without method 2023-02-23 17:23:22 -05:00
Arnaud Benhamdine
9bc1742937 build: support Node.js 19.x 2023-02-23 15:28:18 -05:00
Rakesh Bisht
5ad95419ba docs: fix typos in history
closes #5131
2023-02-23 12:14:47 -05:00
Douglas Christopher Wilson
8a76f39d98 build: eslint@8.34.0 2023-02-23 00:28:41 -05:00
Douglas Christopher Wilson
60b7c672c1 build: mocha@10.2.0 2023-02-23 00:27:06 -05:00
Douglas Christopher Wilson
1e42a98db6 deps: body-parser@1.20.2 2023-02-23 00:24:20 -05:00
Rakesh Bisht
506fbd63be docs: add missing JSDoc param for parseExtendedQueryString
closes #5130
2023-02-22 21:10:07 -05:00
Douglas Christopher Wilson
b9f7a97fe1 build: use $GITHUB_OUTPUT for environment list 2023-02-22 18:10:59 -05:00
Douglas Christopher Wilson
546969d198 build: Node.js@18.14 2023-02-22 12:07:48 -05:00
Douglas Christopher Wilson
f05b5d0e9c build: Node.js@16.19 2023-02-22 11:59:40 -05:00
Rakesh Bisht
3c1d605da7 lint: remove unused parameters in examples
closes #5113
2023-02-22 10:25:07 -05:00
Rakesh Bisht
6b4c4f5426 docs: fix typos in JSDoc comments
closes #5117
2023-02-22 00:16:40 -05:00
Rakesh Bisht
a1efd9d6cf lint: remove unused parameter from internal function
coses #5119
2023-02-21 22:55:22 -05:00
Rakesh Bisht
c6ee8d6e7f lint: remove unused function arguments in tests
closes #5124
2023-02-20 22:57:13 -05:00
Abdul Rauf
442fd46799 build: actions/checkout@v3
closes #5027
2022-11-01 21:13:10 -04:00
Arnaud Benhamdine
723b67766f build: Node.js@18.12 2022-11-01 21:10:12 -04:00
Arnaud Benhamdine
29e117e676 build: Node.js@16.18 2022-11-01 21:08:43 -04:00
Kevin Jones
06b2b1416d docs: update git clone to https protocol
closes #5032
2022-11-01 21:05:31 -04:00
Douglas Christopher Wilson
8368dc178a 4.18.2 2022-10-08 16:11:42 -04:00
Abhinav Das
61f4049122 docs: replace Freenode with Libera Chat
closes #5013
2022-10-08 14:52:31 -04:00
Douglas Christopher Wilson
bb7907b932 build: Node.js@18.10
closes #5014
2022-10-07 17:48:59 -04:00
Douglas Christopher Wilson
f56ce73186 build: supertest@6.3.0 2022-10-06 10:28:13 -04:00
Douglas Christopher Wilson
24b3dc5516 deps: qs@6.11.0 2022-10-06 10:27:01 -04:00
Douglas Christopher Wilson
689d175b8b deps: body-parser@1.20.1 2022-10-06 10:26:18 -04:00
Douglas Christopher Wilson
340be0f79a build: eslint@8.24.0 2022-10-05 22:40:51 -04:00
REALSTEVEIG
33e8dc303a docs: use Node.js name style
closes #4926
2022-08-19 21:12:14 -04:00
Douglas Christopher Wilson
644f6464b9 build: supertest@6.2.4 2022-08-18 23:42:39 -04:00
Douglas Christopher Wilson
ecd7572f1e build: Node.js@14.20 2022-08-18 23:41:10 -04:00
Douglas Christopher Wilson
97131bcda8 build: Node.js@18.7 2022-08-18 23:01:25 -04:00
Douglas Christopher Wilson
8d98e86d7f build: Node.js@16.17 2022-08-18 23:00:36 -04:00
Alexandru Dragomir
2c47827053 examples: remove unused function arguments in params
closes #4914
2022-05-20 11:57:37 -04:00
Douglas Christopher Wilson
97f0a518d8 tests: verify all handlers called in stack tests 2022-05-20 11:54:35 -04:00
Douglas Christopher Wilson
7ec5dd2b3c Fix regression routing a large stack in a single route
fixes #4913
2022-05-20 09:37:20 -04:00
Douglas Christopher Wilson
ab2c70b954 build: Node.js@18.1 2022-05-20 09:35:20 -04:00
Douglas Christopher Wilson
745a63f825 build: ejs@3.1.8 2022-05-20 09:34:47 -04:00
Douglas Christopher Wilson
a2dfc56a49 build: mocha@10.0.0 2022-05-20 09:33:19 -04:00
Douglas Christopher Wilson
d854c43ea1 4.18.1 2022-04-29 15:32:26 -04:00
Douglas Christopher Wilson
b02a95c693 build: Node.js@16.15 2022-04-29 14:52:20 -04:00
Douglas Christopher Wilson
631ada0c64 Fix hanging on large stack of sync routes
fixes #4899
2022-04-29 13:34:47 -04:00
Hashen
75e0c7a2c9 bench: remove unused parameter
closes #4898
2022-04-28 22:00:49 -04:00
Douglas Christopher Wilson
e2482b7e36 build: ejs@3.1.7 2022-04-28 21:59:32 -04:00
Douglas Christopher Wilson
2df96e349f build: supertest@6.2.3 2022-04-28 13:04:38 -04:00
Douglas Christopher Wilson
a38fae126a build: mocha@9.2.2 2022-04-28 13:04:11 -04:00
Douglas Christopher Wilson
547fdd41dc 4.18.0 2022-04-25 14:53:28 -04:00
Deniz
0b330ef57c bench: print latency and vary connections
closes #4880
2022-04-24 19:31:42 -04:00
Douglas Christopher Wilson
158a17031a build: support Node.js 18.x 2022-04-21 02:09:08 -04:00
Douglas Christopher Wilson
29ea1b2f74 build: use 64-bit Node.js in AppVeyor 2022-04-21 01:38:59 -04:00
Douglas Christopher Wilson
11a209e4b7 build: support Node.js 17.x 2022-04-20 22:02:37 -04:00
phoenix
fd8e45c344 tests: mark stack overflow as long running
closes #4887
2022-04-20 19:52:20 -04:00
Douglas Christopher Wilson
708ac4cdf5 Fix handling very large stacks of sync middleware
closes #4891
2022-04-13 23:29:25 -04:00
Douglas Christopher Wilson
92c5ce59f5 deps: cookie@0.5.0 2022-04-11 22:51:13 -04:00
Hashen
8880ddad1c examples: add missing html label associations
closes #4884
2022-04-11 19:29:14 -04:00
Douglas Christopher Wilson
b91c7ffb28 examples: use http-errors to create errors 2022-04-11 19:28:50 -04:00
Eslam Salem
ecaf67c930 docs: remove Node Security Project from security policy
closes #4890
2022-04-11 18:54:33 -04:00
Ghouse Mohamed
99175c3ef6 docs: fix typo in casing of HTTP
closes #4872
2022-04-08 03:42:09 -04:00
Hashen
1b2e097be2 tests: fix typo in description
closes #4882
2022-04-07 19:20:41 -04:00
Douglas Christopher Wilson
04da4aaf1a build: use supertest@3.4.2 for Node.js 6.x 2022-04-07 19:17:10 -04:00
Douglas Christopher Wilson
2e2d78c4d9 deps: on-finished@2.4.1 2022-04-03 01:15:37 -04:00
3imed-jaberi
980d881e3b deps: statuses@2.0.1
closes #4336
2022-04-02 22:39:35 -04:00
Douglas Christopher Wilson
1df75763e3 deps: qs@6.10.3 2022-04-02 21:56:41 -04:00
Douglas Christopher Wilson
32c558d414 deps: body-parser@1.20.0 2022-04-02 21:51:31 -04:00
Douglas Christopher Wilson
a10770286e Use http-errors for res.format error 2022-03-27 23:41:31 -04:00
Chris Barth
5855339455 Fix behavior of null/undefined as "maxAge" in res.cookie
fixes #3935
closes #3936
2022-03-26 23:11:48 -04:00
Ulises Gascon
1cc8169938 deps: depd@2.0.0
closes #4174
2022-03-26 14:05:25 -04:00
Nadav Ivgi
9482b82d0b Invoke default with same arguments as types in res.format
closes #3587
2022-03-26 01:29:40 -04:00
Douglas Christopher Wilson
10b9b507b7 examples: use updated res.download in example 2022-03-25 18:14:27 -04:00
Douglas Christopher Wilson
03dc367187 Allow options without filename in res.download 2022-03-25 18:13:42 -04:00
Douglas Christopher Wilson
f739b162d9 deps: finalhandler@1.2.0 2022-03-25 01:46:32 -04:00
Douglas Christopher Wilson
c92420648e deps: serve-static@1.15.0 2022-03-25 01:44:51 -04:00
Douglas Christopher Wilson
dd69eedd18 deps: send@0.18.0 2022-03-25 01:43:45 -04:00
Tommaso Tofacchi
0def9bb659 Add "root" option to res.download
fixes #4834
closes #4855
2022-03-25 00:08:38 -04:00
Jon Church
4847d0efa1 Deprecate string and non-integer arguments to res.status
closes #4223
2022-03-23 23:14:08 -04:00
Evan Hahn
c17fe05861 Ignore Object.prototype values in settings through app.set/app.get
closes #4802
closes #4803
2022-03-23 20:05:05 -04:00
Tito D. Kesumo Siregar
87279c08aa Support proper 205 responses using res.send
closes #4592
closes #4596
2022-03-23 20:05:05 -04:00
Kris Kalavantavanich
8bf0720391 build: support Node.js 16.x 2022-03-23 20:05:05 -04:00
Kris Kalavantavanich
eb4c930d5f build: support Node.js 15.x 2022-03-23 20:05:05 -04:00
Hashen
947b6b7d57 lint: remove unnecessary continue statement in loop
closes #4868
2022-03-20 22:59:20 -04:00
Hashen
bf4c3ee00f docs: fix incomplete JSDoc comment
closes #4867
2022-03-20 20:51:39 -04:00
Hashen
2a7417dd84 examples: fixup html
closes #4866
2022-03-20 15:14:33 -04:00
Tobias Speicher
490f1a1738 lint: remove deprecated String.prototype.substr
closes #4860
2022-03-20 12:34:37 -04:00
Douglas Christopher Wilson
446046f886 build: mocha@9.2.1 2022-03-01 00:27:48 -05:00
Douglas Christopher Wilson
291993d73c tests: expand res.sendFile options tests 2022-03-01 00:22:09 -05:00
Steven
e8594c3571 docs: add install size badge
closes #3710
2022-02-28 23:41:41 -05:00
Douglas Christopher Wilson
07aa91f7cb docs: consolidate contributing in readme 2022-02-28 21:52:57 -05:00
Douglas Christopher Wilson
4ed35b4202 docs: switch badges to badgen 2022-02-28 21:23:49 -05:00
Douglas Christopher Wilson
ea66a9b81b docs: update link to github actions ci 2022-02-28 21:15:08 -05:00
apeltop
d0e166c3c6 docs: fix typo in private api jsdoc
closes #4843
2022-02-28 18:37:41 -05:00
Douglas Christopher Wilson
cf9f662655 tests: fix position of res.sendfile(path, options) test 2022-02-24 00:17:01 -05:00
Douglas Christopher Wilson
8da8f79c44 tests: fix callback in res.download test 2022-02-23 00:20:34 -05:00
Douglas Christopher Wilson
18f782bba9 tests: remove duplicate utils 2022-02-23 00:18:36 -05:00
Douglas Christopher Wilson
bc5ca05509 tests: remove usage of should 2022-02-21 19:54:52 -05:00
Douglas Christopher Wilson
9967ffbdc2 tests: update res.append to verify separate header lines 2022-02-21 19:23:25 -05:00
Douglas Christopher Wilson
7df0c840e0 tests: fix up app.locals tests 2022-02-21 19:07:26 -05:00
Douglas Christopher Wilson
d8ed591117 tests: fix req.acceptsLanguage tests 2022-02-20 23:49:42 -05:00
Douglas Christopher Wilson
8ee3420f0f tests: fix req.acceptsEncodings tests 2022-02-20 23:43:02 -05:00
Douglas Christopher Wilson
3d7fce56a3 4.17.3 2022-02-16 21:03:42 -05:00
Douglas Christopher Wilson
f9063712e0 build: update example dependencies 2022-02-16 00:11:24 -05:00
Douglas Christopher Wilson
6381bc6317 deps: qs@6.9.7 2022-02-16 00:03:16 -05:00
Douglas Christopher Wilson
a007863096 deps: body-parser@1.19.2 2022-02-15 23:43:41 -05:00
Douglas Christopher Wilson
e98f5848a0 Revert "build: use minimatch@3.0.4 for Node.js < 4" 2022-02-14 18:42:47 -05:00
Douglas Christopher Wilson
a65913776d tests: use strict mode 2022-02-09 01:07:08 -05:00
Douglas Christopher Wilson
a39e409cf3 tests: prevent leaking changes to NODE_ENV 2022-02-08 18:40:07 -05:00
KoyamaSohei
82de4de5ab examples: fix path traversal in downloads example
closes #4120
2022-02-08 17:32:10 -05:00
Douglas Christopher Wilson
12310c5294 build: use nyc for test coverage 2022-02-07 23:08:12 -05:00
Thomas Strauß
884657d546 examples: remove bitwise syntax for includes check
closes #4814
2022-02-07 22:58:44 -05:00
Douglas Christopher Wilson
7511d08328 build: use minimatch@3.0.4 for Node.js < 4 2022-02-07 17:46:47 -05:00
Douglas Christopher Wilson
2585f209f9 tests: fix test missing assertion 2022-02-04 21:18:47 -05:00
Douglas Christopher Wilson
9d0976229d build: supertest@6.2.2 2022-02-04 21:14:41 -05:00
Douglas Christopher Wilson
43cc56eb9e build: clean up gitignore 2022-02-04 16:48:33 -05:00
Douglas Christopher Wilson
1c7bbcc143 build: Node.js@14.19 2022-02-04 16:36:47 -05:00
Douglas Christopher Wilson
9cbbc8ae74 deps: cookie@0.4.2 2022-02-04 16:35:50 -05:00
Douglas Christopher Wilson
6fbc269563 pref: remove unnecessary regexp for trust proxy 2022-02-04 16:34:56 -05:00
Douglas Christopher Wilson
2bc734aa3f deps: accepts@~1.3.8 2022-02-04 16:21:11 -05:00
caioagiani
89bb531b31 docs: fix typo in res.download jsdoc
closes #4805
2022-02-03 23:26:17 -05:00
Douglas Christopher Wilson
744564fcf8 tests: add test for multiple ips in "trust proxy" 2022-02-02 16:19:01 -05:00
Douglas Christopher Wilson
da6cb0ed8a tests: add range tests to res.download 2022-02-02 15:15:41 -05:00
Douglas Christopher Wilson
00ad5bee96 tests: add more tests for app.request & app.response 2022-02-02 15:02:46 -05:00
Douglas Christopher Wilson
141914e817 tests: fix tests that did not bubble errors 2022-02-02 14:16:20 -05:00
Douglas Christopher Wilson
bd4fdfe5f7 tests: remove global dependency on should
fixes #4797
2022-02-02 01:55:16 -05:00
Douglas Christopher Wilson
215f484fb4 tests: fix wording of req.accepts* test cases 2022-02-02 01:42:35 -05:00
Douglas Christopher Wilson
20047bb6e4 examples: use strict mode 2022-02-02 01:30:51 -05:00
Douglas Christopher Wilson
8b9757e8b8 build: fix running linter in CI 2022-02-02 01:25:55 -05:00
Douglas Christopher Wilson
a84e73b958 tests: add test for hello-world example 2022-02-02 01:23:40 -05:00
Douglas Christopher Wilson
69997cbdbe examples: fix error handling in auth example 2022-02-02 00:44:28 -05:00
Douglas Christopher Wilson
c221b8596e build: mocha@9.2.0 2022-01-27 19:02:58 -05:00
Douglas Christopher Wilson
ea537d907d 4.17.2 2021-12-16 22:40:49 -05:00
Douglas Christopher Wilson
eee93a2760 build: update example dependencies 2021-12-16 21:47:10 -05:00
Douglas Christopher Wilson
b35773cf19 build: eslint@7.32.0 2021-12-16 21:44:26 -05:00
Douglas Christopher Wilson
c8a42006b8 build: mocha@9.1.3 2021-12-16 21:39:43 -05:00
Aalaap Ghag
21cf522dcd examples: improve 404 message wording
closes #4471
2021-12-16 13:00:12 -05:00
Douglas Christopher Wilson
a24f27aba7 deps: serve-static@1.14.2 2021-12-16 12:54:18 -05:00
3imed-jaberi
a33266a206 build: support Node.js 14.x 2021-12-16 00:22:28 -05:00
3imed-jaberi
6fe271e8aa build: support Node.js 13.x 2021-12-16 00:22:28 -05:00
Wes Todd
cbe25d66b3 deps: setprototypeof@1.2.0
closes #4011
2021-12-15 22:38:19 -05:00
Douglas Christopher Wilson
3bb6d96ba9 examples: demonstrate sub directory download 2021-12-15 21:06:33 -05:00
Douglas Christopher Wilson
6660649f1b deps: qs@6.9.6 2021-12-15 20:48:00 -05:00
Douglas Christopher Wilson
a75e4707b9 docs: add note about security report location 2021-12-15 20:45:56 -05:00
Douglas Christopher Wilson
db05a741f0 deps: send@0.17.2 2021-12-11 20:19:38 -05:00
Douglas Christopher Wilson
c2e23ece2e deps: body-parser@1.19.1 2021-12-11 03:45:46 -05:00
Douglas Christopher Wilson
96850e872a deps: content-disposition@0.5.4 2021-12-10 17:58:03 -05:00
Douglas Christopher Wilson
b8d59d5c98 deps: safe-buffer@5.2.1 2021-12-10 17:56:56 -05:00
Douglas Christopher Wilson
59d695c447 build: update example dependencies 2021-12-10 15:47:40 -05:00
Andy
e242796eb3 tests: fix test in app.head
closes #4765
2021-12-04 09:36:34 -05:00
Douglas Christopher Wilson
aaa9690bcf deps: proxy-addr@~2.0.7 2021-11-17 16:16:04 -05:00
drewm
f275e87dff Fix handling of undefined when "json escape" is enabled
closes #4744
2021-11-17 00:00:56 -05:00
Douglas Christopher Wilson
9dd0e7afdb Fix handling of undefined in res.jsonp 2021-11-16 23:58:17 -05:00
Douglas Christopher Wilson
1b2f3a0698 tests: fix up primitive tests for res.jsonp 2021-11-16 23:53:10 -05:00
3imed-jaberi
519126d732 deps: cookie@0.4.1
closes #4337
2021-11-16 21:59:01 -05:00
Ivan Derevianko
99a369f3d5 Fix incorrect middleware execution with unanchored RegExps
fixes #4204
closes #4205
2021-11-16 21:52:11 -05:00
Kim
a1dbb11377 Fix res.jsonp(obj, status) deprecation message
closes #4155
2021-11-16 00:41:19 -05:00
Florian Brandt
353348a83e Fix typo in res.is JSDoc
closes #4192
2021-11-16 00:25:10 -05:00
Juan José Arboleda
dab6ee5822 tests: remove extraneous code from app.listen test
closes #4714
2021-11-15 23:56:46 -05:00
3imed-jaberi
fc138c108f deps: proxy-addr@~2.0.6
closes #4340
2021-11-15 23:14:48 -05:00
Douglas Christopher Wilson
61a23e801f build: mocha@8.4.0 2021-10-05 21:55:00 -04:00
Douglas Christopher Wilson
313d54f033 build: supertest@6.1.6 2021-09-01 19:32:00 -04:00
Douglas Christopher Wilson
de081eb70f build: eslint@4.19.1 2021-09-01 19:27:00 -04:00
Aravind Nair
06d11755c9 build: Node.js@12.22 2021-08-14 01:12:32 -04:00
Aravind Nair
6f2afd3d80 build: Node.js@10.24 2021-08-14 01:12:31 -04:00
Aravind Nair
d5a1cbee70 build: fix wrong Node.js 8.x in AppVeyor
closes #4574
2021-08-14 01:12:24 -04:00
zhangky
f9a0560a9c docs: fix res.sendStatus/sendFile jsdoc comments
closes #4673
2021-08-14 00:39:56 -04:00
Andrew Heaney
821b7f0624 examples: fix typo in comment
closes #4667
2021-08-11 20:39:01 -04:00
Douglas Christopher Wilson
f490f78563 build: reduce npm output 2021-08-11 20:38:31 -04:00
Aravind Nair
884e080a19 build: ejs@3.1.6
closes #4572
closes #4573
2021-07-31 21:54:15 -04:00
alberto barboza
eb76236e2f build: hbs@4.1.2
closes #4643
2021-07-31 18:31:10 -04:00
Hussein Mohamed
52e9bd67b7 tests: fix typos
closes #4564
2021-07-31 16:00:16 -04:00
Hussein Mohamed
135a05c524 docs: fix typos in jsdoc
closes #4564
2021-07-31 16:00:00 -04:00
Lutger Kunst
30afebf8da examples: fixed typo in ejs example css
closes #4554
2021-07-30 16:22:34 -04:00
Douglas Christopher Wilson
8e4add7f74 tests: remove should usage from Router tests
fixes #4635
2021-07-30 16:19:55 -04:00
Abderrahmenla
0fbbc29632 lint: coalesce duplicate switch statements
closes #4587
2021-07-30 15:46:10 -04:00
Aravind Nair
2402126988 build: disable fast-fail for GitHub Actions
closes #4628
2021-07-02 15:53:27 -04:00
Douglas Christopher Wilson
ca3c863428 build: use GitHub Actions instead of Travis CI 2021-07-01 15:22:40 -04:00
Douglas Christopher Wilson
28db2c2c5c build: supertest@6.1.3 2021-01-28 20:17:55 -05:00
Douglas Christopher Wilson
685d4665fd build: mocha@8.2.1 2020-12-23 20:41:52 -05:00
Douglas Christopher Wilson
280a8d39ec build: fix Node.js version check in AppVeyor 2020-12-22 23:41:28 -05:00
Douglas Christopher Wilson
5c4f3e7cc7 build: supertest@6.0.1 2020-11-09 21:44:32 -05:00
Douglas Christopher Wilson
de122c14f5 build: Node.js@12.18 2020-10-21 19:48:58 -04:00
Douglas Christopher Wilson
2a2dd5d32b build: Node.js@10.23 2020-10-19 21:33:05 -04:00
H3RSKO
508936853a docs: update grammar in readme
closes #4376
2020-09-16 21:27:53 -04:00
Rodion Abdurakhimov
5596222f6a docs: update example summaries
closes #4370
2020-08-04 09:46:42 -04:00
Rodion Abdurakhimov
fe67523b9c docs: add examples summary page
closes #4343
closes #4354
2020-07-27 15:15:54 -04:00
yasser
4486fa6324 docs: fix Code of Conduct link in Contributing
closes #4351
2020-07-16 15:06:57 -04:00
Yogi
ecd8a08c1c docs: fix typos in Contributing 2020-07-07 22:43:16 -04:00
Yogi
a75728432e docs: fix typos in Collaborator Guide 2020-07-07 22:42:34 -04:00
Yogi
9007dcbdba docs: fix typos in Triager Guide 2020-07-07 22:42:01 -04:00
Yogi
c519886be5 docs: fix typos in Charter 2020-07-07 22:41:04 -04:00
Moni
3ff1dbeb73 docs: fix markdown links in contributing
closes #4315
2020-06-21 23:06:54 -04:00
Gireesh Punathil
18da651c5b docs: add triager guide
closes #4055
closes #4211
2020-05-06 09:58:29 -07:00
Douglas Christopher Wilson
1b48a5cc3c docs: fix heading levels 2020-04-14 21:12:37 -04:00
Wes Todd
561b4b601e docs: add Charter
closes #4144
2020-04-14 01:39:53 -04:00
Wes Todd
67e64ca4c1 docs: add Code of Conduct
closes #4143
2020-04-07 01:35:34 -04:00
Manuel Baesler
922e9a4615 build: add http keyword for npm search
closes #4102
2020-03-25 19:00:15 -04:00
KoyamaSohei
323a38965a examples: properly escape user input in route-map
fixes #3992
closes #4119
2020-03-25 17:35:14 -04:00
Aditya Srivastava
3f1dcb96e0 examples: add viewport and charset where missing
closes #3860
2020-03-25 17:10:34 -04:00
yanokenken
4b4fa26298 docs: add npm init hint to install section 2020-03-25 16:26:39 -04:00
Chang Wang
47c1d2a816 docs: point npm downloads badge to npm charts of express
closes #3579
2020-03-25 15:37:04 -04:00
Douglas Christopher Wilson
65aff94ec6 build: remove deprecated Travis CI directive 2020-03-17 20:37:16 -04:00
Douglas Christopher Wilson
2d519077ea build: supertest@4.0.2 2020-03-17 20:31:10 -04:00
Douglas Christopher Wilson
d967675852 build: mocha@7.0.1 2020-02-19 00:49:36 -05:00
Douglas Christopher Wilson
22d5b7ed10 build: Node.js@12.16 2020-02-19 00:32:14 -05:00
Douglas Christopher Wilson
872aa4741c build: Node.js@10.19 2020-02-19 00:27:51 -05:00
Douglas Christopher Wilson
87bc4ef763 build: update example dependencies 2020-02-11 23:10:15 -05:00
Douglas Christopher Wilson
f0cbdeadf6 build: mocha@7.0.0 2020-01-09 18:58:52 -05:00
Douglas Christopher Wilson
f1e8a877f4 build: Node.js@12.14 2020-01-09 18:40:28 -05:00
Douglas Christopher Wilson
55831bbd08 build: Node.js@10.18 2020-01-09 18:37:52 -05:00
Douglas Christopher Wilson
e757fa0039 build: Node.js@8.17 2020-01-09 18:30:57 -05:00
Douglas Christopher Wilson
95735a6fcc build: supertest@3.4.2 2019-11-10 22:21:57 -05:00
Douglas Christopher Wilson
668d029a14 build: mocha@6.2.2 2019-11-10 22:15:49 -05:00
Douglas Christopher Wilson
866ffd67d7 build: Node.js@12.13 2019-11-10 22:09:43 -05:00
Douglas Christopher Wilson
741e3f81af build: Node.js@10.17 2019-11-10 22:04:12 -05:00
Douglas Christopher Wilson
4efb49866d build: mocha@6.2.0 2019-08-04 22:23:09 -04:00
Douglas Christopher Wilson
6506fb578c build: Node.js@12.7 2019-08-04 22:09:45 -04:00
Douglas Christopher Wilson
dfa7b80642 build: Node.js@10.16 2019-08-04 22:03:22 -04:00
Douglas Christopher Wilson
e1b45ebd05 4.17.1 2019-05-26 00:24:55 -04:00
Douglas Christopher Wilson
0a48e18056 Revert "Improve error message for null/undefined to res.status"
fixes #3968
2019-05-25 18:15:13 -04:00
Douglas Christopher Wilson
eed05a1464 build: Node.js@12.3 2019-05-24 23:20:52 -04:00
Douglas Christopher Wilson
10c7756764 4.17.0 2019-05-16 21:25:42 -04:00
Douglas Christopher Wilson
9dadca2c64 docs: remove Gratipay links 2019-05-16 20:53:07 -04:00
Douglas Christopher Wilson
b8e50568af tests: ignore unreachable line 2019-05-16 10:04:24 -04:00
Douglas Christopher Wilson
94e48a16f2 build: update example dependencies 2019-05-16 09:58:40 -04:00
Douglas Christopher Wilson
efcb17dcb2 deps: cookie@0.4.0
closes #3958
2019-05-16 09:55:26 -04:00
huadong zuo
b9ecb9afe3 build: support Node.js 12.x
closes #3946
2019-05-16 01:20:24 -04:00
Douglas Christopher Wilson
5266f3a5cb build: test against Node.js 13.x nightly 2019-05-12 22:15:36 -04:00
Douglas Christopher Wilson
e502dde3c8 build: Node.js@10.15 2019-05-12 22:09:35 -04:00
Douglas Christopher Wilson
da6f701317 deps: range-parser@~1.2.1 2019-05-12 22:01:06 -04:00
Douglas Christopher Wilson
88f9733ffa deps: serve-static@1.14.1 2019-05-11 19:29:33 -04:00
Douglas Christopher Wilson
8267c4b724 deps: send@0.17.1 2019-05-10 23:49:13 -04:00
Douglas Christopher Wilson
bc07a41693 deps: finalhandler@~1.1.2 2019-05-09 22:09:56 -04:00
Douglas Christopher Wilson
c754c8ad7b build: support Node.js 11.x 2019-05-09 19:45:01 -04:00
Douglas Christopher Wilson
e917028729 build: Node.js@8.16 2019-05-09 18:03:56 -04:00
Douglas Christopher Wilson
7b076bd8e1 build: Node.js@6.17 2019-05-09 18:03:12 -04:00
Douglas Christopher Wilson
bb5211fa1c tests: add express.text test suite 2019-05-08 23:39:45 -04:00
Ilya Guterman
7f4e37f3ea Add express.text to parse bodies into string
closes #3455
2019-05-08 23:39:16 -04:00
Douglas Christopher Wilson
11192bd168 tests: add express.raw test suite 2019-05-08 00:58:08 -04:00
Amit Zur
0bcdd88dd0 Add express.raw to parse bodies into Buffer
closes #3708
2019-05-08 00:57:02 -04:00
Douglas Christopher Wilson
60aacac167 deps: serve-static@1.14.0
closes #3486
2019-05-07 23:42:36 -04:00
Douglas Christopher Wilson
70a19472f1 deps: send@0.17.0 2019-05-07 23:05:37 -04:00
Douglas Christopher Wilson
6f7a8301a1 tests: add express.static test suite 2019-05-02 17:49:29 -04:00
Douglas Christopher Wilson
8b71f39516 tests: add express.urlencoded test suite 2019-05-01 23:29:28 -04:00
Douglas Christopher Wilson
955f2a5f78 tests: add express.json test suite 2019-05-01 22:59:42 -04:00
Douglas Christopher Wilson
2f782d8478 deps: body-parser@1.19.0 2019-04-30 23:31:32 -04:00
Douglas Christopher Wilson
32f5293afa deps: qs@6.7.0 2019-04-30 23:06:50 -04:00
Douglas Christopher Wilson
6d9dd2da49 deps: type-is@~1.6.18 2019-04-30 22:48:56 -04:00
Douglas Christopher Wilson
40dbfa2de2 deps: accepts@~1.3.7 2019-04-30 22:24:35 -04:00
Douglas Christopher Wilson
9afa1cfc85 deps: statuses@~1.5.0 2019-04-30 22:17:03 -04:00
Douglas Christopher Wilson
7eacdcef19 deps: setprototypeof@1.1.1 2019-04-22 13:40:23 -04:00
James George
b02d3a1744 docs: add link to contributing guide
closes #3846
2019-04-17 16:18:37 -04:00
Douglas Christopher Wilson
03341204ff deps: parseurl@~1.3.3 2019-04-17 16:06:35 -04:00
Douglas Christopher Wilson
50eb5e4377 deps: proxy-addr@~2.0.5 2019-04-17 16:05:17 -04:00
Douglas Christopher Wilson
952484f73a deps: content-disposition@0.5.3 2019-04-17 16:00:02 -04:00
Douglas Christopher Wilson
4218d04183 build: marked@0.6.2 2019-04-17 15:58:26 -04:00
Douglas Christopher Wilson
cf5c813d2f build: hbs@4.0.4 2019-04-17 15:51:33 -04:00
Douglas Christopher Wilson
9e5d1a30c3 build: test against Node.js 12.x nightly 2019-04-17 10:44:27 -04:00
김정환
8a97346eaf tests: assert calls order in middleware basic tests
closes #3878
2019-04-17 10:41:43 -04:00
Marcin Wanago
6eda52a3dc docs: use const in readme example
fixes #3867
closes #3868
2019-04-16 17:56:38 -04:00
김정환
b9b1b19758 tests: fix typos in descriptions
closes #3875
2019-04-16 12:40:59 -04:00
Louis
6f12eee8ab docs: fix typo in jsdoc comment
closes #3859
2019-04-16 10:29:07 -04:00
Ciro Santilli
186a206a0a docs: add listening address to example
closes #3873
2019-04-16 00:28:15 -04:00
Alvin Smith
02f3933b69 examples: minor fixes to some examples
closes #3812
2018-12-17 23:00:19 -05:00
Austin Scriver
0ae10bb154 docs: fix typos in history
closes #3810
2018-12-17 19:49:39 -05:00
HubCodes
95c31f7041 docs: fix typo in contributing
closes #3827
2018-12-17 19:12:37 -05:00
Horatiu Eugen Vlad
b93ffd4bdc Support multiple hosts in X-Forwarded-Host
fixes #3494
closes #3495
2018-10-28 15:58:25 -04:00
Joshua Caron
8da51108e7 Improve error message for null/undefined to res.status
closes #2795
closes #2797
closes #3111
2018-10-27 14:04:49 -04:00
void
6bcdfef6ad Improve error message for non-strings to res.sendFile
closes #3582
2018-10-27 02:27:15 -04:00
Felix Bünemann
44e539e1dc build: support Node.js 10.x
closes #3617
2018-10-27 01:28:11 -04:00
Nacim Goura
003459b795 build: support Node.js 9.x
closes #3617
2018-10-27 00:55:42 -04:00
Douglas Christopher Wilson
6295b45920 build: test against Node.js 11.x nightly 2018-10-27 00:50:58 -04:00
Douglas Christopher Wilson
a6b119d27a build: coveralls@2.12.0 2018-10-27 00:05:00 -04:00
Douglas Christopher Wilson
d0421ac7e1 tests: use supertest to perform assertions 2018-10-26 23:34:00 -04:00
Douglas Christopher Wilson
dc538f6e81 4.16.4 2018-10-10 23:50:45 -04:00
Douglas Christopher Wilson
62a59b6ace build: update example dependencies 2018-09-27 18:09:27 -04:00
Douglas Christopher Wilson
451ee5d9c1 build: supertest@3.3.0 2018-09-24 23:40:21 -04:00
Douglas Christopher Wilson
f07f368fba build: mocha@5.2.0 2018-09-21 23:16:17 -04:00
Douglas Christopher Wilson
09d5654488 build: restructure CI build steps 2018-09-21 23:01:22 -04:00
Douglas Christopher Wilson
3d10279826 Fix issue where "Request aborted" may be logged in res.sendfile 2018-09-19 23:25:16 -04:00
Douglas Christopher Wilson
5e9de5dcb6 deps: safe-buffer@5.1.2 2018-09-19 14:47:48 -04:00
Douglas Christopher Wilson
5de1a08ebf build: supertest@2.0.0 2018-09-19 14:06:22 -04:00
Douglas Christopher Wilson
4480fb997e deps: proxy-addr@~2.0.4 2018-09-19 12:40:40 -04:00
Felix Bünemann
b8fb6a7fb1 deps: body-parser@1.18.3
closes #3655
closes #3706
2018-09-18 21:58:46 -04:00
Douglas Christopher Wilson
b4eb1f59d3 deps: qs@6.5.2 2018-09-18 21:56:31 -04:00
Linus Unnebäck
431f65305e lint: move removed middlewares list to a variable
closes #3558
closes #3677
closes #3678
2018-09-13 18:46:45 -04:00
Andreas Kohn
f3fa758af9 Fix JSDoc for Router constructor
fixes #3598
fixes #3599
fixes #3698
2018-09-13 18:44:47 -04:00
Logan Ripplinger
ede24da964 examples: fix typo in multi-router example
closes #3718
2018-09-13 18:15:48 -04:00
Douglas Christopher Wilson
d5b33cfad8 build: update example dependencies 2018-09-13 12:26:36 -04:00
Douglas Christopher Wilson
c39d7d9339 build: Node.js@8.12 2018-09-13 12:23:38 -04:00
Douglas Christopher Wilson
f95dbc28fd build: should@13.2.3 2018-07-31 17:09:27 -04:00
Douglas Christopher Wilson
ac89f6f121 build: Node.js@8.11 2018-06-07 00:12:07 -04:00
Douglas Christopher Wilson
3d8ca8ad4a build: Node.js@6.14 2018-06-07 00:04:28 -04:00
Douglas Christopher Wilson
02c753583e build: Node.js@4.9 2018-06-06 23:50:03 -04:00
Douglas Christopher Wilson
3ed5090ca9 4.16.3 2018-03-12 13:38:44 -04:00
Douglas Christopher Wilson
76bf96e9ce deps: finalhandler@1.1.1 2018-03-12 11:20:19 -04:00
Douglas Christopher Wilson
d3bdc3b663 build: marked@0.3.17 2018-03-12 11:17:26 -04:00
Douglas Christopher Wilson
0e88dceac2 deps: accepts@~1.3.5 2018-02-28 23:44:00 -05:00
Douglas Christopher Wilson
e69a29d9c2 deps: type-is@~1.6.16 2018-02-28 19:55:34 -05:00
Douglas Christopher Wilson
0083372bed deps: proxy-addr@~2.0.3 2018-02-26 23:18:07 -05:00
Douglas Christopher Wilson
f3c5f7ee29 build: test against Node.js 10.x nightly 2018-02-13 21:21:26 -05:00
Alejandro Estrada
40e04ec7a6 lint: remove usages of "=="
closes #3540
2018-02-13 19:30:57 -05:00
Douglas Christopher Wilson
972ada9079 tests: remove duplicate block in router test 2018-02-13 17:14:48 -05:00
Steven Anthony
80e64691e1 examples: add full urls to web-service example
closes #3519
2018-02-13 16:50:13 -05:00
Yuta Hiroto
98b0b66b6c build: use yaml eslint configuration
closes #3561
2018-02-13 16:45:40 -05:00
Douglas Christopher Wilson
cbaa04629a deps: serve-static@1.13.2 2018-02-09 13:20:09 -05:00
Douglas Christopher Wilson
276a80895c deps: send@0.16.2 2018-02-09 13:09:25 -05:00
Douglas Christopher Wilson
94a6cbfbfe tests: remove unnecessary functions for supertest 2018-01-17 00:28:25 -05:00
Douglas Christopher Wilson
f8fba68ec0 tests: use supertest expect to test body 2018-01-17 00:20:15 -05:00
Douglas Christopher Wilson
c6f12a8971 deps: statuses@~1.4.0 2018-01-17 00:00:22 -05:00
Douglas Christopher Wilson
323572610b deps: encodeurl@~1.0.2 2018-01-16 23:50:41 -05:00
Douglas Christopher Wilson
f448a96685 deps: depd@~1.1.2 2018-01-16 23:46:11 -05:00
Douglas Christopher Wilson
68e824cbff build: remove Node.js 8 nightly build 2018-01-16 19:19:03 -05:00
Douglas Christopher Wilson
086e56f1c4 build: marked@0.3.12 2018-01-16 19:12:34 -05:00
Douglas Christopher Wilson
b4020ec92b build: should@13.2.1 2018-01-16 19:09:25 -05:00
Douglas Christopher Wilson
fe0bc4082d build: Node.js@8.9 2018-01-02 22:38:09 -05:00
Douglas Christopher Wilson
1780ed1091 build: Node.js@6.12 2018-01-02 21:47:13 -05:00
Douglas Christopher Wilson
b49af6a674 build: should@13.2.0 2018-01-02 19:46:31 -05:00
Douglas Christopher Wilson
a743d5be4d build: marked@0.3.9 2018-01-02 19:45:25 -05:00
David Wu
187d1f57c9 docs: remove gratipay badges
closes #3524
2018-01-02 19:41:43 -05:00
chainhelen
950f4423f0 tests: separate res.send() chain test
closes #3448
2018-01-02 19:26:27 -05:00
Yaman Jain
53bee2506d examples: use https github url
closes #3465
2018-01-02 19:05:52 -05:00
Douglas Christopher Wilson
351396f971 4.16.2 2017-10-09 22:55:18 -04:00
Douglas Christopher Wilson
b97faff6e2 perf: skip parsing of entire "X-Forwarded-Proto" header 2017-10-09 22:43:23 -04:00
David Wood
b7817ab1b0 Fix TypeError in res.send when given Buffer and ETag header set
fixes #3445
2017-10-09 22:11:49 -04:00
Douglas Christopher Wilson
48aba21ea4 docs: add missing history for res.download change 2017-10-04 23:09:22 -04:00
Douglas Christopher Wilson
de129c289d tests: run mocha with --no-exit to detect hangs
closes #3439
2017-10-01 00:48:29 -04:00
Douglas Christopher Wilson
e3f7f51f5f 4.16.1 2017-09-29 16:23:23 -04:00
Douglas Christopher Wilson
6f823e409c deps: serve-static@1.13.1
closes #3436
2017-09-29 16:12:06 -04:00
Douglas Christopher Wilson
6d9b13cced deps: send@0.16.1 2017-09-29 15:56:55 -04:00
Douglas Christopher Wilson
f974d22c66 4.16.0 2017-09-28 13:57:23 -04:00
Douglas Christopher Wilson
8d4ceb623d docs: add more information to installation 2017-09-28 13:55:15 -04:00
Douglas Christopher Wilson
c0136d8b48 Add express.json and express.urlencoded to parse bodies
closes #2211
2017-09-28 13:22:36 -04:00
Douglas Christopher Wilson
86f5df00ed deps: serve-static@1.13.0
closes #3197
2017-09-28 13:08:38 -04:00
Daniel Tschinder
41964580a8 deps: send@0.16.0
closes #3431
closes #3435
2017-09-28 12:39:05 -04:00
Douglas Christopher Wilson
ddeb71301c tests: add maxAge option tests for res.sendFile 2017-09-28 12:32:27 -04:00
Greg Guthe
7154014785 Add "escape json" setting for res.json and res.jsonp
closes #3268
closes #3269
2017-09-28 12:03:42 -04:00
Douglas Christopher Wilson
628438d8d8 deps: update example dependencies 2017-09-28 11:36:20 -04:00
Aaron Clover
a24fd0ca6c Add options to res.download
closes #3327
closes #3370
2017-09-28 11:11:08 -04:00
Douglas Christopher Wilson
95fb5cc268 perf: remove dead .charset set in res.jsonp 2017-09-28 10:30:10 -04:00
chainhelen
44591fee23 deps: vary@~1.1.2
closes #3434
2017-09-28 10:08:23 -04:00
Hrvoje Šimić
2df1ad26a5 Improve error messages when non-function provided as middleware
closes #3426
2017-09-28 09:20:37 -04:00
Douglas Christopher Wilson
12c3712468 Use safe-buffer for improved Buffer API 2017-09-28 08:26:39 -04:00
Hrvoje Šimić
fa272edf84 docs: fix typo in jsdoc comment
closes #3430
2017-09-28 08:05:54 -04:00
Lawrence Page
d9d09b8b90 perf: re-use options object when generating ETags
closes #3313
closes #3314
2017-09-28 08:04:42 -04:00
Douglas Christopher Wilson
02a9d5fb28 deps: proxy-addr@~2.0.2
closes #3432
2017-09-28 01:18:04 -04:00
Douglas Christopher Wilson
c2f4fb5356 deps: finalhandler@1.1.0 2017-09-28 00:42:05 -04:00
Douglas Christopher Wilson
673d51f4f0 deps: utils-merge@1.0.1 2017-09-28 00:19:30 -04:00
Douglas Christopher Wilson
5cc761c865 deps: parseurl@~1.3.2 2017-09-28 00:04:47 -04:00
Douglas Christopher Wilson
ad7d96db47 deps: qs@6.5.1 2017-09-27 21:31:39 -04:00
Douglas Christopher Wilson
e62bb8bf9f deps: etag@~1.8.1 2017-09-27 21:30:43 -04:00
Douglas Christopher Wilson
70589c3aef deps: content-type@~1.0.4 2017-09-27 21:30:08 -04:00
Douglas Christopher Wilson
9a99c15270 deps: accepts@~1.3.4 2017-09-27 21:28:25 -04:00
Douglas Christopher Wilson
550043c217 deps: setprototypeof@1.1.0 2017-09-25 21:14:00 -04:00
Douglas Christopher Wilson
48940e6120 Skip Buffer encoding when not generating ETag for small response 2017-09-25 21:12:47 -04:00
Douglas Christopher Wilson
80f1ea9bec Improve error message when autoloading invalid view engine
fixes #3403
2017-09-25 21:11:33 -04:00
Douglas Christopher Wilson
c3fb7e5adc build: test against Node.js 9.x nightly 2017-09-25 21:06:00 -04:00
Douglas Christopher Wilson
94fdb674b1 build: support Node.js 8.x 2017-09-25 20:57:54 -04:00
Douglas Christopher Wilson
ea3d605652 4.15.5 2017-09-25 01:04:38 -04:00
Douglas Christopher Wilson
40435ec997 deps: serve-static@1.12.6 2017-09-22 20:28:52 -04:00
Douglas Christopher Wilson
7137bf567d deps: send@0.15.6 2017-09-22 20:27:37 -04:00
Douglas Christopher Wilson
bd1672f0a4 deps: finalhandler@~1.0.6 2017-09-22 20:26:30 -04:00
Douglas Christopher Wilson
9395db4c22 deps: debug@2.6.9 2017-09-22 20:25:18 -04:00
Kunal Pathak
19a2eeb476 tests: check render error without engine-specific message
closes #3251
2017-09-21 22:45:26 -04:00
Douglas Christopher Wilson
d7da22550d build: should@13.1.0 2017-09-21 20:49:14 -04:00
Douglas Christopher Wilson
961dbff904 deps: serve-static@1.12.5 2017-09-21 20:48:23 -04:00
Douglas Christopher Wilson
9e0fa7f1ca deps: send@0.15.5 2017-09-21 20:46:42 -04:00
Douglas Christopher Wilson
9e067ad2cb deps: fresh@0.5.2 2017-09-21 20:45:32 -04:00
Douglas Christopher Wilson
de5fb62b1a deps: update example dependencies 2017-09-17 20:13:05 -04:00
Douglas Christopher Wilson
b208b24f83 build: should@13.0.1 2017-09-13 20:09:33 -04:00
Douglas Christopher Wilson
78e55108e4 build: mocha@3.5.3 2017-09-13 20:03:42 -04:00
Douglas Christopher Wilson
48817a798f build: remove minor pin for nightly 2017-08-17 22:03:40 -04:00
Douglas Christopher Wilson
a4bd4373b2 4.15.4 2017-08-06 22:03:53 -04:00
Douglas Christopher Wilson
a50f1098d0 deps: serve-static@1.12.4 2017-08-06 02:38:02 -04:00
Douglas Christopher Wilson
e2d725e016 deps: send@0.15.4 2017-08-06 02:37:10 -04:00
Douglas Christopher Wilson
e0066227f7 lint: remove all unused varaibles 2017-08-06 00:19:32 -04:00
Douglas Christopher Wilson
44881fabe3 docs: update collaborator guide for lint script 2017-08-06 00:18:57 -04:00
Douglas Christopher Wilson
1dbaae51dd deps: update example dependencies 2017-08-05 23:54:31 -04:00
Douglas Christopher Wilson
56e90e3c72 lint: add eslint rules that cover editorconfig 2017-08-05 23:37:39 -04:00
Daniel Walasek
713d2aed93 tests: fix incorrect should usage
closes #3387
2017-08-05 20:10:35 -04:00
Douglas Christopher Wilson
e0aa8bf74e build: mocha@3.5.0 2017-08-04 00:26:50 -04:00
Douglas Christopher Wilson
85770a71fc deps: finalhandler@~1.0.4 2017-08-04 00:25:59 -04:00
Hung HOANG
daf66beda4 examples: fix path join in ejs example
fixes #3382
closes #3383
closes #3385
2017-08-03 21:20:55 -04:00
Douglas Christopher Wilson
b2af101821 build: ejs@2.5.7 2017-08-02 23:32:44 -04:00
Douglas Christopher Wilson
3eb16c233c deps: depd@~1.1.1 2017-08-02 23:30:47 -04:00
Douglas Christopher Wilson
582381bceb deps: proxy-addr@~1.1.5 2017-07-26 13:09:46 -04:00
Owen Luke
5e16f400f1 examples: use 1-based visitor count in cookie-sessions
closes #3312
2017-07-26 13:05:41 -04:00
Piper Chester
43dff4ceb3 docs: fix GitHub capitalization
closes #3353
2017-07-26 11:53:05 -04:00
Douglas Christopher Wilson
04beebb2c0 build: Node.js@6.11 2017-07-26 11:52:42 -04:00
Douglas Christopher Wilson
1adee79e63 deps: update example dependencies 2017-06-30 23:58:01 -04:00
Douglas Christopher Wilson
bd5951e603 deps: debug@2.6.8
closes #3286
closes #3337
2017-06-30 23:51:18 -04:00
Douglas Christopher Wilson
deffce5704 deps: qs@6.5.0 2017-06-30 23:47:12 -04:00
Douglas Christopher Wilson
48777dc377 build: mocha@3.4.2 2017-06-04 19:12:30 -04:00
Douglas Christopher Wilson
9467a392e3 build: Node.js@7.10 2017-06-04 19:09:25 -04:00
Owen Luke
9f019c8c69 examples: add comment about Redis install in examples
closes #3310
2017-05-17 21:18:35 -04:00
Owen Luke
cf37240e73 examples: fix reference error in view-constructor
closes #3310
2017-05-17 21:17:47 -04:00
Owen Luke
60f87f8074 examples: fix posts link in route-separation example
closes #3310
2017-05-17 21:17:16 -04:00
Owen Luke
fde8f647d3 examples: fix route in params example
closes #3310
2017-05-17 21:14:47 -04:00
Douglas Christopher Wilson
6da454c7fb 4.15.3 2017-05-17 02:14:11 -04:00
Douglas Christopher Wilson
5cf473dc5d deps: debug@2.6.7 2017-05-17 02:08:50 -04:00
Douglas Christopher Wilson
65494692c2 build: mocha@3.4.1 2017-05-17 01:57:31 -04:00
Douglas Christopher Wilson
bc2986fe59 deps: finalhandler@~1.0.3 2017-05-17 01:56:36 -04:00
Douglas Christopher Wilson
58cfc9911b deps: serve-static@1.12.3 2017-05-17 01:47:17 -04:00
Douglas Christopher Wilson
ad4456c491 deps: send@0.15.3 2017-05-17 01:46:34 -04:00
Douglas Christopher Wilson
1ba9a9ac23 deps: update example dependencies 2017-05-17 01:28:21 -04:00
Oz Michaeli
ae0b630ac7 Fix error when res.set cannot add charset to Content-Type
fixes #3303
closes #3305
closes #3307
2017-05-14 23:58:25 -04:00
Douglas Christopher Wilson
5ea2a8ff8e build: Node.js@7.9 2017-05-14 23:29:13 -04:00
Tony Anisimov
de41c0bfa4 Fix res.cookie jsdoc comment
closes #3304
2017-05-11 15:51:03 -04:00
Colin Richardson
a13938eed7 tests: add tests for res.location('back')
closes #3292
closes #3293
2017-05-07 19:26:33 -04:00
Douglas Christopher Wilson
1b6e7004b7 deps: send@0.15.2 2017-04-27 01:11:58 -04:00
Douglas Christopher Wilson
2d1dade36a deps: serve-static@1.12.2 2017-04-27 00:00:57 -04:00
Douglas Christopher Wilson
df4f2719db deps: type-is@~1.6.15 2017-04-26 23:49:41 -04:00
asaf david
c087a45b9c Fix typo in variable name setPrototypeOf
closes #3266
2017-03-31 22:27:00 -04:00
Douglas Christopher Wilson
347d4db3ca deps: proxy-addr@~1.1.4 2017-03-28 22:56:32 -04:00
Jamie Barton
aabf7802a9 docs: fix the security issues heading format
closes #3256
2017-03-24 17:07:06 -04:00
Jamie Barton
3763d73a1f examples: replace jade with hbs in mvc example
fixes #3181
closes #3185
closes #3243
closes #3245
closes #3249
2017-03-23 00:45:23 -04:00
Douglas Christopher Wilson
8acaa9a3ea deps: finalhandler@~1.0.1
fixes #3252
2017-03-22 02:12:06 -04:00
Douglas Christopher Wilson
dbf092d3ea deps: vary@~1.1.1 2017-03-22 02:10:43 -04:00
Wes Todd
efd7032f71 build: Add .editorconfig
closes #3221
2017-03-19 16:46:37 -04:00
Douglas Christopher Wilson
2189ff14a9 lint: remove trailing new lines from docs 2017-03-19 16:45:58 -04:00
Jamie Barton
245fa8942a examples: replace jade with ejs in route-separation
closes #3241
2017-03-17 00:09:50 -04:00
Douglas Christopher Wilson
1b6ad08095 deps: debug@2.6.3 2017-03-14 23:53:19 -04:00
Douglas Christopher Wilson
a1fffda3f2 build: should@11.2.1 2017-03-14 23:46:29 -04:00
Jamie Barton
f44368f8be examples: replace jade with ejs in view-locals
closes #3240
2017-03-09 23:41:15 -05:00
Jamie Barton
64dd446aa8 docs: remove dead link to translated readme
closes #3239
2017-03-09 23:37:06 -05:00
Douglas Christopher Wilson
d43b074f0b 4.15.2 2017-03-06 08:34:38 -05:00
Douglas Christopher Wilson
05fd1e4441 deps: update example dependencies 2017-03-06 08:33:37 -05:00
Douglas Christopher Wilson
85c96fd64e deps: qs@6.4.0 2017-03-06 08:32:13 -05:00
Douglas Christopher Wilson
d32ed68b29 4.15.1 2017-03-05 23:19:32 -05:00
Jamie Barton
57d3dfd9f8 examples: merge the jade example into ejs
closes #3223
2017-03-05 23:13:53 -05:00
chainhelen
eece3850bc tests: use path.join instead of concatenation
closes #3236
2017-03-05 23:08:47 -05:00
chainhelen
8eb95ae579 examples: use path.join instead of concatenation
closes #3236
2017-03-05 23:07:24 -05:00
Douglas Christopher Wilson
67168fe231 deps: serve-static@1.12.1
fixes #3233
2017-03-05 00:08:16 -05:00
Douglas Christopher Wilson
c0089d971b deps: send@0.15.1 2017-03-05 00:06:59 -05:00
Douglas Christopher Wilson
dc8acc8676 tests: use supertest expect for simple assertions 2017-03-05 00:04:47 -05:00
Jianru Lin
7027b37764 lint: remove unused err argument
closes #3228
2017-03-04 23:22:08 -05:00
Jamie Barton
b4550fbe7a Use ejs instead of jade within engine jsdoc
closes #3222
2017-03-01 19:34:30 -05:00
Jamie Barton
4012846d25 examples: use static assets in search example
closes #3224
2017-03-01 18:22:36 -05:00
Douglas Christopher Wilson
6d9b127989 build: Node.js@7.6 2017-03-01 17:44:13 -05:00
Douglas Christopher Wilson
504a51c040 4.15.0 2017-03-01 17:22:18 -05:00
Douglas Christopher Wilson
7f96896f67 deps: update example dependencies 2017-03-01 17:17:50 -05:00
Douglas Christopher Wilson
f59de6ae3d build: Node.js@7.7 2017-03-01 17:16:21 -05:00
Douglas Christopher Wilson
72475543bc build: Node.js@6.10 2017-03-01 17:16:09 -05:00
Douglas Christopher Wilson
146a13ede7 build: Node.js@4.8 2017-03-01 17:15:57 -05:00
Blake Embrey
9722202df9 Add next("router") to exit from router
closes #2241
closes #2371
2017-02-26 14:38:05 -05:00
Douglas Christopher Wilson
51f52901eb Fix case where router.use skipped requests routes did not
fixes #3037
2017-02-26 13:59:47 -05:00
Douglas Christopher Wilson
8b6dc6ceec Use "%o" in path debug to tell types apart 2017-02-26 13:45:35 -05:00
Douglas Christopher Wilson
081b811b10 perf: add fast match path for "*" route 2017-02-26 13:32:21 -05:00
Douglas Christopher Wilson
1f71fae23b tests: add lone "*" route tests 2017-02-26 13:21:18 -05:00
Douglas Christopher Wilson
acc4a619d9 deps: serve-static@1.12.0 2017-02-25 19:31:39 -05:00
Douglas Christopher Wilson
1b43166fca deps: send@0.15.0 2017-02-25 17:53:34 -05:00
Douglas Christopher Wilson
6022567c75 Use setprototypeof module to replace __proto__ setting
closes #1967
closes #2613
closes #3103
closes #3164
2017-02-23 01:56:58 -05:00
Douglas Christopher Wilson
12ff56e1e4 Use Object.create to setup request & response prototypes 2017-02-23 01:52:49 -05:00
Douglas Christopher Wilson
668f545fd4 Skip routing when req.url is not set 2017-02-22 23:42:57 -05:00
Douglas Christopher Wilson
7bc5f1af96 lint: consolidate layer match failure path 2017-02-22 23:09:36 -05:00
Douglas Christopher Wilson
8de1230d03 lint: remove unreachable code 2017-02-22 23:03:20 -05:00
Wes
034165caeb Use statuses instead of http module for status messages
closes #3215
2017-02-22 02:16:52 -05:00
Douglas Christopher Wilson
a9f15aaefc deps: fresh@0.5.0 2017-02-22 02:11:06 -05:00
Douglas Christopher Wilson
f87abb3493 Remove usage of res._headers private field
closes #3174
2017-02-20 22:08:33 -05:00
Douglas Christopher Wilson
cd7d241a5d build: test against Node.js 8.x nightly 2017-02-20 21:29:19 -05:00
Douglas Christopher Wilson
9f4dbae083 deps: etag@~1.8.0 2017-02-20 21:25:26 -05:00
Douglas Christopher Wilson
f2bbd10ae7 deps: update example dependencies 2017-02-20 21:24:55 -05:00
Douglas Christopher Wilson
92c859dd05 deps: finalhandler@~1.0.0 2017-02-20 21:24:54 -05:00
Ángel Sanz
485b6f86ac perf: improve req.ips performance
closes #2723
2017-02-20 21:24:54 -05:00
Douglas Christopher Wilson
906164b204 deps: qs@6.3.1 2017-02-20 21:24:54 -05:00
Douglas Christopher Wilson
c63424a0a1 deps: debug@2.6.1 2017-02-20 21:24:54 -05:00
Douglas Christopher Wilson
bbed8021c6 build: support Node.js 7.x 2017-02-20 21:24:54 -05:00
Pravdomil
fefd729037 Add debug message when loading view engine
closes #3158
2017-02-20 21:24:34 -05:00
Mike Tunnicliffe
1a99bb0519 docs: add release guide
closes #2857
closes #2890
2017-02-20 20:05:54 -05:00
Douglas Christopher Wilson
4420a7bd94 docs: update link to expressjs.com website repo 2017-02-20 18:25:42 -05:00
Rand McKinney
1678613db1 docs: add guide for writing readmes
closes #3209
2017-02-20 18:21:38 -05:00
Rand McKinney
f3a47e39a4 docs: update collaborator guide 2017-02-20 17:57:14 -05:00
Douglas Christopher Wilson
3e3d35777d tests: update req.range tests to run through express 2017-02-20 17:09:21 -05:00
Douglas Christopher Wilson
eb326d7ecb tests: update req.is tests to run through express 2017-02-20 16:55:15 -05:00
Douglas Christopher Wilson
7ef92f8a17 examples: remove semi-broken expose-data-to-client example 2017-02-16 00:42:57 -05:00
Rand McKinney
c48014fde8 docs: minor fixes to contributing guide 2017-02-16 00:22:31 -05:00
Douglas Christopher Wilson
034f261fea examples: use pbkdf2-password module in auth example
closes #3207
2017-02-15 23:36:17 -05:00
Sebastian Van Sande
abd1de73c1 tests: fix misnamed app.router test section
fixes #3194
closes #3199
2017-02-07 19:42:35 -05:00
Douglas Christopher Wilson
fb3946f454 lint: fix broken indentation in tests 2017-02-04 20:54:47 -05:00
Tom Hosford
4f291e7d55 examples: use res.format in error-pages
closes #3195
2017-02-04 20:48:12 -05:00
Takuma Hanatani
94377f681d lint: remove unnecessary semicolon
closes #3191
2017-02-04 20:43:50 -05:00
Douglas Christopher Wilson
0437c513f2 4.14.1 2017-01-28 17:21:24 -05:00
Douglas Christopher Wilson
1f70b76c45 build: Node.js@4.7 2017-01-28 16:56:34 -05:00
Douglas Christopher Wilson
0b39fa2f7c build: should@11.2.0 2017-01-28 16:40:40 -05:00
Douglas Christopher Wilson
0d6c64fdfd deps: type-is@~1.6.14 2017-01-26 22:54:05 -05:00
Douglas Christopher Wilson
c238aca438 examples: remove big-view example 2017-01-26 22:48:08 -05:00
Douglas Christopher Wilson
6b506d801a examples: fix mvc example to ignore files in controllers dir
fixes #3182
2017-01-26 22:33:52 -05:00
Douglas Christopher Wilson
dc48f27f60 deps: update example dependencies 2017-01-26 22:25:39 -05:00
Douglas Christopher Wilson
8e14e06ebf deps: serve-static@~1.11.2 2017-01-24 07:40:20 -08:00
Douglas Christopher Wilson
572657ee4a deps: send@0.14.2 2017-01-23 10:43:11 -05:00
Douglas Christopher Wilson
cfae537d3b deps: finalhandler@0.5.1 2017-01-21 01:05:17 -05:00
Douglas Christopher Wilson
a3d635309c deps: proxy-addr@~1.1.3 2017-01-21 01:00:52 -05:00
Douglas Christopher Wilson
a2e323a012 build: should@11.1.2 2017-01-21 00:59:29 -05:00
Douglas Christopher Wilson
e73913b583 build: mocha@3.2.0 2017-01-21 00:46:28 -05:00
Douglas Christopher Wilson
ddc93aa0e2 deps: content-disposition@0.5.2 2017-01-21 00:39:46 -05:00
Zachary Lester
6723b4419a tests: add test for res.sendFile "cacheContol" option
closes #3061
2017-01-21 00:33:29 -05:00
SeongHeon Kim
d1d9631b97 docs: remove link to missing section
closes #3179
2017-01-21 00:26:49 -05:00
Deniz Tetik
1a17888073 docs: fix minor grammatical error
closes #3178
2017-01-21 00:25:47 -05:00
Douglas Christopher Wilson
f6dca56e72 build: istanbul@0.4.5 2016-12-03 00:08:46 -05:00
Douglas Christopher Wilson
6210e47cb6 build: after@0.8.2 2016-12-03 00:04:47 -05:00
Douglas Christopher Wilson
1bcc9b1236 build: Node.js@6.9 2016-12-02 22:19:04 -05:00
Douglas Christopher Wilson
421ad5aaaa build: Node.js@5.12 2016-12-02 22:12:33 -05:00
Douglas Christopher Wilson
505f8482f2 build: Node.js@4.6 2016-12-02 22:09:46 -05:00
Vishvajit Pathak
bd47aeb88d tests: fix typos in test descriptions
closes #3129
closes #3130
2016-11-18 13:47:28 -05:00
Hamza
305f982bd7 exapmples: use path.join to concat paths
closes #3046
2016-07-31 22:14:05 +10:00
Douglas Christopher Wilson
9375a9afa9 4.14.0 2016-06-16 11:03:44 -04:00
Douglas Christopher Wilson
14cf9c5636 deps: update example dependencies 2016-06-15 18:16:08 -04:00
Douglas Christopher Wilson
605983fd0e build: should@9.0.2 2016-06-15 18:13:30 -04:00
Douglas Christopher Wilson
e06766c573 deps: finalhandler@0.5.0 2016-06-15 18:12:19 -04:00
Douglas Christopher Wilson
76eaa326ee Encode URL in res.location/res.redirect if not already encoded
fixes #2897
fixes #3003
2016-06-13 23:23:29 -04:00
Douglas Christopher Wilson
c12cc88392 build: support Node.js 6.x 2016-06-13 22:51:07 -04:00
Douglas Christopher Wilson
23c22ce3fe build: support Node.js 5.x 2016-06-13 22:50:18 -04:00
Douglas Christopher Wilson
791cabf939 deps: serve-static@~1.11.1 2016-06-12 22:38:20 -04:00
Douglas Christopher Wilson
fc40702cb7 deps: send@0.14.1 2016-06-12 22:33:44 -04:00
Douglas Christopher Wilson
c762b16f62 Improve error with invalid arguments to req.get()
fixes #2993
2016-06-03 00:07:34 -04:00
Douglas Christopher Wilson
5d642af8c3 Add "options" argument to req.range 2016-06-01 19:13:36 -04:00
Douglas Christopher Wilson
7fcf1d7d5b docs: update the req.range jsdoc comment 2016-06-01 19:04:02 -04:00
Douglas Christopher Wilson
7ee41cc23f deps: range-parser@~1.2.0 2016-06-01 18:54:11 -04:00
Douglas Christopher Wilson
8ddab697cc build: supertest@1.2.0 2016-06-01 17:31:10 -04:00
Douglas Christopher Wilson
d038689658 build: should@9.0.0 2016-06-01 17:27:06 -04:00
Douglas Christopher Wilson
c9531ac1f1 build: mocha@2.5.3 2016-06-01 17:24:08 -04:00
Douglas Christopher Wilson
98224d2c4f build: ejs@2.4.2 2016-06-01 17:22:15 -04:00
huaoguo
2e1284beb6 Fix Windows absolute path check using forward slashes
closes #3017
2016-06-01 16:47:03 -04:00
Douglas Christopher Wilson
999546dfde deps: qs@6.2.0 2016-05-31 14:28:20 -04:00
Douglas Christopher Wilson
cc25a04d10 deps: type-is@~1.6.13 2016-05-31 14:25:41 -04:00
Benjamin Tan
f90f9dde3f Improve performance for res.json/res.jsonp in most cases
closes #2900
2016-05-31 00:32:48 -04:00
Ángel Sanz
b69b7605b0 perf: use strict equality when possible
closes #2722
2016-05-31 00:25:34 -04:00
Douglas Christopher Wilson
c6039af39d deps: proxy-addr@~1.1.2 2016-05-31 00:12:54 -04:00
Douglas Christopher Wilson
bdf604a77e deps: cookie@0.3.1 2016-05-31 00:08:16 -04:00
Douglas Christopher Wilson
76c56d1ab8 deps: vary@~1.1.0 2016-05-29 14:25:27 -04:00
Douglas Christopher Wilson
2cf830b29e deps: content-type@~1.0.2 2016-05-23 23:18:41 -04:00
Douglas Christopher Wilson
e5502690d2 deps: accepts@~1.3.3 2016-05-23 23:15:52 -04:00
Douglas Christopher Wilson
31dd549f35 tests: add test for dispatching to empty route 2016-05-23 23:03:13 -04:00
Douglas Christopher Wilson
e3dd191d54 examples: escape HTML in markdown example 2016-05-23 23:00:43 -04:00
Douglas Christopher Wilson
fd48bfe8fe build: should@8.4.0 2016-05-23 22:47:25 -04:00
Douglas Christopher Wilson
d7ae24228d build: mocha@2.5.1 2016-05-23 22:44:48 -04:00
Douglas Christopher Wilson
992cd085fb build: istanbul@0.4.3 2016-05-23 22:41:26 -04:00
Douglas Christopher Wilson
20a25489de build: ejs@2.4.1 2016-05-23 22:39:59 -04:00
Douglas Christopher Wilson
741a5aac9c build: cache node_modules on CI 2016-05-23 22:12:31 -04:00
Rand McKinney
3d56e7374d docs: update location of expressjs.com repo
closes #2995
2016-05-12 20:23:54 -04:00
Douglas Christopher Wilson
12bc16e72f tests: use supertest to check response header values
closes #2983
closes #2992
2016-05-11 08:50:38 +02:00
Douglas Christopher Wilson
8931b2311a build: Node.js@4.4 2016-05-10 12:42:16 -04:00
Linus Unnebäck
bb84cf955f tests: add test for signed cookie without secret
closes #2986
2016-05-10 11:54:52 -04:00
Mikeal Rogers
f3d99a4fdb docs: add base contributing guide
closes #2918
2016-03-01 18:55:01 -05:00
Muhammad Saqib
dd2b897774 examples: comment the usage of process.nextTick
closes #2903
closes #2908
2016-02-24 21:58:50 -05:00
Sian January
4bcbf67482 docs: add branch & fork steps to contributing documentation
closes #2881
2016-02-10 18:35:54 -05:00
Andy Fleming
b5a280111f Fix jsdoc comment for res.get
closes #2882
2016-02-10 18:32:51 -05:00
Douglas Christopher Wilson
05136550c7 docs: fix some links messed up from repository move commit
closes #2861
closes #2867
2016-02-10 18:21:46 -05:00
Douglas Christopher Wilson
193bed2649 4.13.4 2016-01-21 21:10:45 -05:00
Douglas Christopher Wilson
e7a02f6a25 build: move repository to expressjs 2016-01-21 20:59:53 -05:00
Douglas Christopher Wilson
6847405974 deps: parseurl@~1.3.1 2016-01-20 00:58:09 -05:00
Douglas Christopher Wilson
f627ca8d0b deps: serve-static@~1.10.2 2016-01-20 00:56:56 -05:00
Douglas Christopher Wilson
e83eab85e4 deps: methods@~1.1.2 2016-01-17 22:17:13 -05:00
Douglas Christopher Wilson
1589ce2153 deps: merge-descriptors@1.0.1 2016-01-17 18:51:24 -05:00
Douglas Christopher Wilson
547ea368c2 deps: content-disposition@0.5.1 2016-01-17 18:00:59 -05:00
Douglas Christopher Wilson
8eee818e0b build: istanbul@0.4.2 2016-01-16 23:58:27 -05:00
Douglas Christopher Wilson
7c8456fcde deps: depd@~1.1.0 2016-01-16 23:57:07 -05:00
Douglas Christopher Wilson
53ee474c44 deps: send@0.13.1 2016-01-16 23:56:09 -05:00
Douglas Christopher Wilson
bd118c47df deps: serve-static@~1.10.1 2016-01-16 23:54:41 -05:00
Jordan Larson
f2cf28c2f3 docs: add link to Gitter 2016-01-13 13:44:41 -08:00
Douglas Christopher Wilson
e44f024dab deps: update example dependencies 2015-12-18 15:10:33 -05:00
Douglas Christopher Wilson
2493239192 build: mocha@2.3.4 2015-12-18 15:09:34 -05:00
Douglas Christopher Wilson
c73b1bee51 build: istanbul@0.4.1 2015-12-17 21:02:22 -05:00
Douglas Christopher Wilson
4f8167f23f deps: range-parser@~1.0.3 2015-12-17 20:59:12 -05:00
Douglas Christopher Wilson
c95a1077d2 deps: proxy-addr@~1.0.10 2015-12-17 20:58:41 -05:00
Douglas Christopher Wilson
7d93503914 deps: finalhandler@0.4.1 2015-12-17 20:56:04 -05:00
Douglas Christopher Wilson
2b2a1b28f3 deps: escape-html@~1.0.3 2015-12-17 20:51:32 -05:00
Rand McKinney
4416fb2746 docs: fix link to Security.md in Readme.md
closes #2829
2015-12-15 15:28:59 -05:00
ChALkeR
60f8e77d66 deps: cookie@0.1.5
closes #2799
closes #2800
closes #2801
2015-12-14 23:18:28 -05:00
Douglas Christopher Wilson
23f021a3e1 build: support Node.js 4.x
closes #2751
closes #2754
closes #2757
2015-12-14 23:10:31 -05:00
Young Jae Sim
67116cc5e6 docs: remove link to Korean translation
closes #2820
2015-12-14 23:08:54 -05:00
Rand McKinney
42b944295a Add Security document
closes #2733
closes #2804
2015-12-14 23:06:17 -05:00
Ricardo Bin
7a3b5aea11 tests: add test for res.send() without arguments
closes #2778
closes #2783
2015-11-07 00:25:06 -05:00
Alexander Shemetovsky
e5ec966b2f Fix param definition is jsdoc for app.render
fixes #2741
2015-11-07 00:18:32 -05:00
Douglas Christopher Wilson
5699d64b99 build: ejs@2.3.4 2015-11-07 00:15:39 -05:00
Douglas Christopher Wilson
747fccfb44 build: should@7.1.1 2015-11-06 22:59:46 -05:00
Douglas Christopher Wilson
9665aa2153 build: supertest@1.1.0 2015-11-06 22:57:04 -05:00
Douglas Christopher Wilson
2f37f4b28d build: istanbul@0.4.0 2015-11-06 22:51:09 -05:00
Douglas Christopher Wilson
1a59246746 build: mocha@2.3.3 2015-11-06 22:49:44 -05:00
Douglas Christopher Wilson
963d795d24 build: support io.js 3.x 2015-11-06 22:47:15 -05:00
Douglas Christopher Wilson
2f96412636 build: io.js@2.5 2015-11-06 22:16:06 -05:00
Douglas Christopher Wilson
5a4310e9da build: reduce runtime versions to one per major 2015-11-06 22:09:47 -05:00
Brendan Ashworth
2f8ac6726f tests: fix redirect tests for change in 302 status message
closes #2690
2015-08-03 15:54:03 -04:00
Douglas Christopher Wilson
ef7ad681b2 4.13.3 2015-08-03 01:02:22 -04:00
Douglas Christopher Wilson
11a77a3fff Fix inner numeric indices incorrectly altering parent req.params 2015-08-03 01:01:16 -04:00
Douglas Christopher Wilson
ee90042d0c Fix infinite loop condition using mergeParams: true 2015-08-03 00:50:48 -04:00
Douglas Christopher Wilson
97b2d70d8a 4.13.2 2015-07-31 17:09:15 -04:00
Douglas Christopher Wilson
a4fcd91084 deps: update example dependencies 2015-07-31 17:03:30 -04:00
Douglas Christopher Wilson
a559ca2d58 build: istanbul@0.3.17 2015-07-31 17:02:57 -04:00
Douglas Christopher Wilson
c398a9903d deps: type-is@~1.6.6 2015-07-31 17:02:10 -04:00
Douglas Christopher Wilson
1cea9cedec deps: accepts@~1.2.12 2015-07-31 17:01:35 -04:00
Blake Embrey
e33c5035bb deps: path-to-regexp@0.1.7
closes #2717
2015-07-31 16:58:57 -04:00
Douglas Christopher Wilson
9848645a8e Merge tag '3.21.2' 2015-07-31 16:56:22 -04:00
Douglas Christopher Wilson
cb59086305 3.21.2 2015-07-31 16:15:06 -04:00
Douglas Christopher Wilson
ce087e559e build: marked@0.3.5 2015-07-31 16:13:41 -04:00
Douglas Christopher Wilson
93dd15cd61 deps: connect@2.30.2 2015-07-31 16:13:09 -04:00
Douglas Christopher Wilson
659c0b154c deps: update example dependencies 2015-07-28 23:26:31 -04:00
Douglas Christopher Wilson
09c80bf823 deps: array-flatten@1.1.1 2015-07-28 23:24:00 -04:00
Douglas Christopher Wilson
b53feaa1d8 deps: vary@~1.0.1 2015-07-27 22:12:39 -04:00
Douglas Christopher Wilson
d51d1ea57a build: ejs@2.3.3 2015-07-27 22:11:54 -04:00
Douglas Christopher Wilson
fc95112145 build: should@7.0.2 2015-07-27 22:09:34 -04:00
Douglas Christopher Wilson
de7ffca33f tests: add test for matching route after error 2015-07-24 21:36:56 -04:00
Douglas Christopher Wilson
2ac2509854 4.13.1 2015-07-06 01:38:44 -04:00
Douglas Christopher Wilson
def241f91f build: io.js@2.3 2015-07-06 01:36:51 -04:00
Douglas Christopher Wilson
a48c55896b deps: update example dependencies 2015-07-06 01:21:26 -04:00
Douglas Christopher Wilson
7bea53b92b deps: qs@4.0.0 2015-07-06 01:20:09 -04:00
Douglas Christopher Wilson
3314f767e1 deps: accepts@~1.2.10 2015-07-06 01:00:12 -04:00
Douglas Christopher Wilson
2870add230 deps: type-is@~1.6.4 2015-07-06 00:59:27 -04:00
Douglas Christopher Wilson
1f906d4ffb Merge tag '3.21.1' 2015-07-06 00:57:49 -04:00
Douglas Christopher Wilson
3c0ff8133b 3.21.1 2015-07-06 00:53:25 -04:00
Douglas Christopher Wilson
f247a4182f deps: basic-auth@~1.0.3 2015-07-06 00:39:42 -04:00
Douglas Christopher Wilson
71d56db947 build: ejs@2.3.2 2015-07-06 00:39:06 -04:00
Douglas Christopher Wilson
3ec7cca550 deps: connect@2.30.1 2015-07-06 00:38:10 -04:00
Douglas Christopher Wilson
6c7a367338 4.13.0 2015-06-21 01:46:44 -04:00
Douglas Christopher Wilson
f73ff92430 build: support io.js 2.x 2015-06-20 19:20:52 -04:00
Douglas Christopher Wilson
2a455890b9 Add settings to debug output
closes #2675
2015-06-20 16:21:12 -04:00
Douglas Christopher Wilson
9302acc5e4 perf: remove argument reassignments in routing 2015-06-20 16:13:59 -04:00
Douglas Christopher Wilson
5b4d4b4ab1 Add statusCode properties to two errors 2015-06-20 15:27:47 -04:00
Douglas Christopher Wilson
7d6c1e5c5c perf: skip attempting to decode zero length string 2015-06-20 15:23:35 -04:00
Douglas Christopher Wilson
3b3e1fc38a Fix hiding platform issues with decodeURIComponent
closes #2652
2015-06-20 15:20:35 -04:00
Douglas Christopher Wilson
5915894af3 Simplify res.cookie to call res.append 2015-06-20 14:38:30 -04:00
Douglas Christopher Wilson
bb53b20d4c perf: remove argument reassignments in response prototype 2015-06-20 14:36:48 -04:00
Douglas Christopher Wilson
d414a2dc73 perf: remove argument reassignments in request prototype 2015-06-20 13:48:58 -04:00
Douglas Christopher Wilson
f5a240636d perf: isolate app.render try block 2015-06-20 13:36:40 -04:00
Douglas Christopher Wilson
10502480d0 perf: remove argument reassignments in application 2015-06-20 13:31:03 -04:00
Douglas Christopher Wilson
a8a8564459 perf: remove argument reassignments in View 2015-06-20 13:06:08 -04:00
Douglas Christopher Wilson
0634e7e189 tests: add test for rendering extensionless file without view engine 2015-06-20 12:54:52 -04:00
Blake Embrey
60e2008dee deps: path-to-regexp@0.1.6
fixes #2491
fixes #2617
closes #2637
closes #2683
2015-06-19 09:59:33 -04:00
Douglas Christopher Wilson
e66bb4f328 deps: path-to-regexp@0.1.4 2015-06-18 23:15:13 -04:00
Behcet Uyar
24d1c98c0a Fix res.format error when only default provided
fixes #2665
2015-06-18 23:08:34 -04:00
Douglas Christopher Wilson
e71014f522 perf: enable strict mode 2015-06-18 23:01:18 -04:00
Douglas Christopher Wilson
95ad276cad docs: add license comments 2015-06-18 23:00:20 -04:00
Thomas Cort
91731b4b9c perf: use saved reference to http.STATUS_CODES
closes #2602
2015-06-18 22:56:30 -04:00
Douglas Christopher Wilson
9073bb4fbc deps: update example dependencies 2015-06-18 22:45:33 -04:00
Douglas Christopher Wilson
4212efad74 deps: accepts@~1.2.9 2015-06-18 22:43:51 -04:00
Douglas Christopher Wilson
7b86a0ec98 deps: type-is@~1.6.3 2015-06-18 22:42:19 -04:00
Douglas Christopher Wilson
8ad7e8f5e1 deps: on-finished@~2.3.0 2015-06-18 22:41:28 -04:00
Douglas Christopher Wilson
7b7aaf0bf3 deps: finalhandler@0.4.0 2015-06-18 22:39:57 -04:00
Douglas Christopher Wilson
b5f98ab3b3 deps: serve-static@~1.10.0 2015-06-18 22:26:48 -04:00
Deepak Kapoor
f7e94a30bc Use array-flatten module for flattening arrays
closes #2624
2015-06-18 22:15:15 -04:00
Radu Dan
8da51e3acc Fix issue where next('route') in app.param would incorrectly skip values
fixes #2655
2015-06-18 22:14:37 -04:00
Douglas Christopher Wilson
3d2ecdd5fa Merge tag '3.21.0' 2015-06-18 22:10:21 -04:00
Alexander Marenin
fce3d14b5c docs: update return types for req.accept*()
closes #2663
2015-06-18 22:05:57 -04:00
Phat
4b70375d22 docs: update res.set jsdoc
closes #2600
2015-06-18 22:04:41 -04:00
Douglas Christopher Wilson
115dbe1a4d 3.21.0 2015-06-18 21:14:56 -04:00
Douglas Christopher Wilson
4729685912 deps: fresh@0.3.0 2015-06-18 20:56:48 -04:00
Douglas Christopher Wilson
14b849246e deps: send@0.13.0 2015-06-18 20:56:03 -04:00
Douglas Christopher Wilson
c8d61b6269 deps: etag@~1.7.0
fixes #2667
2015-06-18 20:54:26 -04:00
Douglas Christopher Wilson
0fbf2078e1 deps: escape-html@1.0.2 2015-06-18 20:36:48 -04:00
Douglas Christopher Wilson
77402110b9 deps: cookie@0.1.3 2015-06-18 20:35:56 -04:00
Douglas Christopher Wilson
5207b99e08 deps: basic-auth@1.0.2 2015-06-18 20:34:04 -04:00
Douglas Christopher Wilson
92b5fa8c53 build: should@7.0.1 2015-06-18 20:10:16 -04:00
Douglas Christopher Wilson
62dfa792b2 deps: connect@2.30.0 2015-06-18 20:08:32 -04:00
Douglas Christopher Wilson
29f51c67a6 docs: fix typos in history
closes #2676
closes #2677
closes #2678
2015-06-17 01:24:21 -04:00
Douglas Christopher Wilson
a20a9a1a2e deps: mkdirp@0.5.1 2015-06-17 01:21:20 -04:00
Douglas Christopher Wilson
9ae08f932e build: should@6.0.3 2015-06-17 01:17:42 -04:00
Douglas Christopher Wilson
e9c9f95ade 4.12.4 2015-05-18 00:38:34 -04:00
Douglas Christopher Wilson
4952127f5b deps: etag@~1.6.0 2015-05-18 00:24:03 -04:00
Douglas Christopher Wilson
18c30d46aa deps: update example dependencies 2015-05-18 00:21:33 -04:00
Douglas Christopher Wilson
2efe7da0a0 deps: accepts@~1.2.7 2015-05-18 00:19:43 -04:00
Douglas Christopher Wilson
1255bca352 deps: on-finished@~2.2.1 2015-05-18 00:18:19 -04:00
Douglas Christopher Wilson
d84bdd6e7d deps: qs@2.4.2 2015-05-18 00:17:10 -04:00
Douglas Christopher Wilson
57252060b2 deps: type-is@~1.6.2 2015-05-18 00:16:14 -04:00
Douglas Christopher Wilson
cd52263d23 deps: finalhandler@0.3.6 2015-05-18 00:15:11 -04:00
Douglas Christopher Wilson
13300f4833 deps: serve-static@~1.9.3 2015-05-18 00:13:48 -04:00
Douglas Christopher Wilson
62d5c38575 Merge tag '3.20.3' 2015-05-18 00:12:01 -04:00
Douglas Christopher Wilson
6d43bacb46 build: io.js@1.8 2015-05-01 22:24:05 -04:00
Ignacio Carbajo
ea6e4d3b6f tests: add a missing test description
closes #2631
2015-05-01 22:12:09 -04:00
Douglas Christopher Wilson
8dd1b3a618 build: io.js@1.6 2015-04-11 09:59:44 -04:00
Douglas Christopher Wilson
ab3e7b2465 examples: remove problematic file from download example
closes #2393
2015-04-11 09:54:09 -04:00
Alex Dixon
bbcc1e1f52 examples: fix route-separation example's dev logger
closes #2599
2015-03-19 22:35:49 -04:00
Igor Mozharovsky
2f8a69b710 docs: fix typo in readme
closes #2598
2015-03-18 14:46:29 -04:00
Douglas Christopher Wilson
f56463f8bf 4.12.3 2015-03-17 10:59:48 -04:00
Douglas Christopher Wilson
c894c84e4a build: support io.js 1.x
closes #2539
2015-03-17 02:09:39 -04:00
Douglas Christopher Wilson
4597e118ae deps: update example dependencies 2015-03-17 02:02:23 -04:00
Douglas Christopher Wilson
8ddf158d89 deps: qs@2.4.1 2015-03-17 02:00:56 -04:00
Douglas Christopher Wilson
d0a830bb42 deps: accepts@~1.2.5 2015-03-17 02:00:03 -04:00
Douglas Christopher Wilson
07217205bb deps: type-is@~1.6.1 2015-03-17 01:59:10 -04:00
Douglas Christopher Wilson
9e3727bb23 deps: finalhandler@0.3.4 2015-03-17 01:58:25 -04:00
Douglas Christopher Wilson
410f561b1b deps: serve-static@~1.9.2 2015-03-17 01:57:36 -04:00
Douglas Christopher Wilson
40f4ac3cb3 Merge tag '3.20.2' 2015-03-17 01:52:23 -04:00
Yang Wang
01e059ca74 examples: add missing cookie-session module
fixes #2589
2015-03-17 01:45:03 -04:00
Phat
1114ca1ab6 tests: fix assert usage mistake
fixes #2592
2015-03-17 01:19:38 -04:00
Roman Zubenko
9d16bae682 docs: fix typo in readme
closes #2584
2015-03-17 01:18:59 -04:00
Douglas Christopher Wilson
dee9fbbbda 4.12.2 2015-03-03 00:06:24 -05:00
Douglas Christopher Wilson
7e0afa8268 Fix regression where "Request aborted" is logged using res.sendFile
closes #2571
2015-03-02 13:11:31 -05:00
Douglas Christopher Wilson
1e6d2654a2 4.12.1 2015-03-01 19:11:02 -05:00
Douglas Christopher Wilson
14a58759c3 Fix ECONNRESET errors from res.sendFile usage
fixes #2571
2015-03-01 17:28:48 -05:00
Douglas Christopher Wilson
dbc61fc191 Fix wrong code on aborted connections from res.sendFile 2015-03-01 17:27:50 -05:00
Douglas Christopher Wilson
31cb541b88 Fix constructing application with non-configurable prototype properties
fixes #2561
2015-03-01 16:33:09 -05:00
Douglas Christopher Wilson
7ee56bbe9c build: skip unnecessary depdency in AppVeyor 2015-02-28 23:31:27 -05:00
Douglas Christopher Wilson
cd6df7699d Merge tag '3.20.1' 2015-02-28 23:29:23 -05:00
Douglas Christopher Wilson
51f960f297 4.12.0 2015-02-23 00:56:49 -05:00
Douglas Christopher Wilson
adb6069bd0 deps: ejs@2.3.1 2015-02-23 00:27:17 -05:00
Seth Krasnianski
8fe5fd89c6 tests: fix error-handling typo
closes #2557
2015-02-22 22:30:22 -05:00
Douglas Christopher Wilson
fa546bff85 deps: should@~5.0.1 2015-02-21 15:10:12 -05:00
Douglas Christopher Wilson
1507757f49 deps: istanbul@0.3.6 2015-02-20 19:09:56 -05:00
Douglas Christopher Wilson
028abf5d70 build: add AppVeyor 2015-02-18 23:11:45 -05:00
Douglas Christopher Wilson
3882ba4ba5 docs: update badges 2015-02-18 23:09:47 -05:00
Dmitriy
24fce9deb3 examples: fixes to mvc example
closes #2534
2015-02-18 23:03:24 -05:00
Elvin Yung
9adfc2d586 Fix typos in req.accepts jsdoc
closes #2527
2015-02-18 22:59:49 -05:00
Douglas Christopher Wilson
53e5991dd1 tests: add extra setCharset tests 2015-02-18 22:57:50 -05:00
Douglas Christopher Wilson
9a8cf77c91 deps: update example dependencies 2015-02-18 22:51:18 -05:00
Douglas Christopher Wilson
e56141a7a5 deps: jade@~1.9.2 2015-02-18 22:49:12 -05:00
Douglas Christopher Wilson
ce1abd9f26 deps: serve-static@~1.9.1 2015-02-18 22:48:25 -05:00
Douglas Christopher Wilson
e03ed050ef deps: type-is@~1.6.0 2015-02-18 22:46:34 -05:00
Douglas Christopher Wilson
117d0c9796 deps: accepts@~1.2.4 2015-02-18 22:36:20 -05:00
Douglas Christopher Wilson
531f024e48 Merge tag '3.20.0' 2015-02-18 22:33:47 -05:00
Douglas Christopher Wilson
ca480d7043 tests: improve res.download tests 2015-02-16 17:54:36 -05:00
Douglas Christopher Wilson
63ab25579b 4.11.2 2015-02-01 15:39:08 -05:00
Douglas Christopher Wilson
13c07237fe deps: update example dependencies 2015-02-01 15:27:48 -05:00
Douglas Christopher Wilson
f5d485235e deps: accepts@~1.2.3 2015-02-01 15:26:04 -05:00
Vladimir Grinenko
72d35b6b4a Fix typo in jsdoc description
closes #2514
2015-02-01 15:24:48 -05:00
Douglas Christopher Wilson
c73d7650b5 Merge tag '3.19.2' 2015-02-01 15:23:53 -05:00
Ivan Fraixedes
fea768dbcc Fix an incorrect @api jsdoc
closes #2522
2015-01-31 20:43:36 -05:00
Kevin Shay
2ccb6cf350 Fix res.redirect double-calling res.end for HEAD requests
fixes #2521
2015-01-31 17:29:10 -05:00
Douglas Christopher Wilson
0b62f74a7f deps: type-is@~1.5.6 2015-01-31 17:26:35 -05:00
Douglas Christopher Wilson
45ebb6cdf4 4.11.1 2015-01-21 03:31:11 -05:00
Douglas Christopher Wilson
96f47432a5 deps: update example dependencies 2015-01-21 03:30:16 -05:00
Douglas Christopher Wilson
41f8435d32 tests: fix failing test on Node.js 0.11.15 2015-01-21 03:28:57 -05:00
Douglas Christopher Wilson
b275613d3a deps: serve-static@~1.8.1 2015-01-21 03:25:25 -05:00
Douglas Christopher Wilson
82689d68cf Merge tag '3.19.1' 2015-01-21 03:24:31 -05:00
Douglas Christopher Wilson
40f7a8eaa2 4.11.0 2015-01-13 22:51:55 -05:00
Douglas Christopher Wilson
9434ad39e1 deps: update example dependencies 2015-01-13 22:19:33 -05:00
Douglas Christopher Wilson
7d983c94c7 deps: serve-static@~1.8.0 2015-01-13 22:18:02 -05:00
Douglas Christopher Wilson
0b1cacff03 deps: accepts@~1.2.2 2015-01-13 22:16:00 -05:00
Douglas Christopher Wilson
b809498cf8 Merge tag '3.19.0' 2015-01-13 22:14:26 -05:00
Douglas Christopher Wilson
f6f78e5f02 Add res.append(field, val) to append headers
closes #2455
2015-01-13 21:07:00 -05:00
Douglas Christopher Wilson
591e89ed18 Deprecate app.param(fn)
closes #2429
2015-01-13 19:28:10 -05:00
Douglas Christopher Wilson
1616079a2d Improve deprecation message for router.param() 2015-01-13 19:27:17 -05:00
Douglas Christopher Wilson
4db51fbeba Deprecate req.param()
closes #2440
2015-01-13 19:17:33 -05:00
Douglas Christopher Wilson
ec8daf0e7b Match routes iteratively to prevent stack overflows
fixes #2412
2015-01-13 15:33:54 -05:00
Douglas Christopher Wilson
5312a990b9 Fix res.sendFile not always detecting aborted connection
fixes #2489
2015-01-13 15:01:32 -05:00
Douglas Christopher Wilson
935f05bc84 Fix OPTIONS responses to include the HEAD method properly
fixes #2459
2015-01-13 13:26:19 -05:00
Douglas Christopher Wilson
fc4eb6dae0 Deprecate leading colon in name for app.param
closes #2430
2015-01-13 12:55:22 -05:00
Douglas Christopher Wilson
08939683c7 4.10.8 2015-01-13 12:38:09 -05:00
Douglas Christopher Wilson
55699bee8f deps: update example dependencies 2015-01-12 18:57:16 -05:00
Douglas Christopher Wilson
dab9222942 Fix crash from error within OPTIONS response handler
fixes #2494
2015-01-12 18:00:49 -05:00
Sung Kim
4070dabe53 Fix typo in comment
closes #2493
2015-01-11 12:14:00 -05:00
Douglas Christopher Wilson
a365864229 deps: proxy-addr@~1.0.5 2015-01-11 12:09:34 -05:00
Douglas Christopher Wilson
ff5e96c88b 4.10.7 2015-01-04 19:33:31 -05:00
Nick Mandel
d842647217 docs: readme tweaks
closes #2471
2015-01-04 19:17:12 -05:00
Douglas Christopher Wilson
12626aed35 Fix Allow header for OPTIONS to not contain duplicate methods
fixes #2458
2015-01-04 19:07:21 -05:00
Douglas Christopher Wilson
3387916efc Fix incorrect "Request aborted" for res.sendFile when HEAD or 304
fixes #2481
2015-01-04 18:26:15 -05:00
Douglas Christopher Wilson
f76403b717 deps: type-is@~1.5.5 2015-01-04 17:50:42 -05:00
Douglas Christopher Wilson
2d6faf6da7 deps: serve-static@~1.7.2 2015-01-04 17:49:39 -05:00
Douglas Christopher Wilson
a7227a0964 deps: debug@~2.1.1 2015-01-04 17:47:25 -05:00
Douglas Christopher Wilson
6e9cfa2aea deps: on-finished@~2.2.0 2015-01-04 17:46:41 -05:00
Douglas Christopher Wilson
571ce16405 deps: methods@~1.1.1 2015-01-04 17:42:57 -05:00
Douglas Christopher Wilson
98585d1d0a deps: finalhandler@0.3.3 2015-01-04 17:40:22 -05:00
Douglas Christopher Wilson
b78bd3d1fd 4.10.6 2014-12-12 23:13:34 -05:00
Douglas Christopher Wilson
4aa2801054 Merge tag '3.18.6' 2014-12-12 22:06:21 -05:00
Douglas Christopher Wilson
4d8093302f 4.10.5 2014-12-10 23:53:31 -05:00
Douglas Christopher Wilson
4370908674 deps: type-is@~1.5.4 2014-12-10 23:50:58 -05:00
Douglas Christopher Wilson
f0b679d02d deps: accepts@~1.1.4 2014-12-10 23:49:34 -05:00
Douglas Christopher Wilson
c24463d829 Fix res.send double-calling res.end for HEAD requests
fixes #2467
2014-12-10 12:27:08 -05:00
Douglas Christopher Wilson
656e214937 4.10.4 2014-11-25 00:17:24 -05:00
Douglas Christopher Wilson
4b26bbde2d Fix res.sendFile logging standard write errors
closes #2451
2014-11-24 23:28:37 -05:00
Douglas Christopher Wilson
7fcc8b190d 4.10.3 2014-11-23 18:48:55 -05:00
Douglas Christopher Wilson
b326ae89df Fix res.sendFile logging standard write errors
fixes #2433
2014-11-23 16:53:11 -05:00
Douglas Christopher Wilson
869ddd775c deps: update example dependencies 2014-11-23 15:58:24 -05:00
Douglas Christopher Wilson
997fd74e8c deps: qs@2.3.3 2014-11-23 15:56:59 -05:00
Douglas Christopher Wilson
e3e41a1118 Merge tag '3.18.4' 2014-11-23 15:54:20 -05:00
Douglas Christopher Wilson
ac56cf4606 4.10.2 2014-11-09 19:09:24 -05:00
Josemar Magalhaes
6dea32cd18 examples: add multi router example
closes #2434
2014-11-09 19:01:13 -05:00
Douglas Christopher Wilson
5fab60bc6c Correctly invoke async router callback asynchronously 2014-11-09 18:50:00 -05:00
Douglas Christopher Wilson
881e1ba660 deps: type-is@~1.5.3 2014-11-09 18:42:33 -05:00
Douglas Christopher Wilson
0e488c19df deps: accepts@~1.1.3 2014-11-09 18:41:01 -05:00
Douglas Christopher Wilson
2262a18900 Merge tag '3.18.3' 2014-11-09 18:39:46 -05:00
Douglas Christopher Wilson
b4eaf89186 examples: remove invalid cors example
Not only is the example not even standards-compliant, but it
encourages bad security settings and practices.
2014-11-06 21:14:02 -05:00
Douglas Christopher Wilson
e4debea297 Remove unused source file 2014-11-01 14:09:12 -04:00
Jaime Agudo
1c96e18d20 docs: fix Gratipay links
fixes #2424
2014-11-01 00:09:54 -04:00
Douglas Christopher Wilson
8bb013ec95 4.10.1 2014-10-29 01:15:58 -04:00
Douglas Christopher Wilson
6c0031bfd8 deps: qs@2.3.2 2014-10-29 01:14:44 -04:00
Douglas Christopher Wilson
ab6c189504 Merge tag '3.18.2' 2014-10-29 01:14:04 -04:00
Aria Stewart
eabd4564aa Fix handling of URLs containing :// in the path
fixes #2421
2014-10-29 00:33:02 -04:00
Douglas Christopher Wilson
d40dc651f3 4.10.0 2014-10-23 22:27:45 -04:00
Douglas Christopher Wilson
68290ee87a Fix handling of invalid empty URLs
fixes #2399
2014-10-23 21:33:38 -04:00
Douglas Christopher Wilson
6614352563 Add support for app.set('views', array)
closes #2320
2014-10-23 17:28:53 -04:00
Douglas Christopher Wilson
0e5f2f84ea Use path.resolve in view lookup 2014-10-23 15:55:17 -04:00
Douglas Christopher Wilson
b1d0c19ca1 examples: make main app file names consistent
fixes #2408
2014-10-23 02:39:38 -04:00
lemmy
dfa7ee4732 Pass context to .forEach instead of closure
Has a slight performance improvement

closes #2347
2014-10-23 02:30:09 -04:00
Douglas Christopher Wilson
e9539fc780 docs: visionmedia is now tj on Github 2014-10-23 02:20:51 -04:00
Fishrock123
5f7a37ee51 docs: misc. tweaks
closes #2394
2014-10-23 02:18:24 -04:00
Douglas Christopher Wilson
ff3a368b2f deps: update example dependencies 2014-10-23 02:08:34 -04:00
Douglas Christopher Wilson
ccc45a74f8 Merge tag '3.18.1' 2014-10-23 02:06:20 -04:00
Douglas Christopher Wilson
cd9d2ec6a9 deps: on-finished@~2.1.1 2014-10-23 01:45:58 -04:00
Douglas Christopher Wilson
ce7bbae007 deps: serve-static@~1.7.1 2014-10-23 01:43:19 -04:00
Douglas Christopher Wilson
6a5dd52deb deps: qs@2.3.0 2014-10-23 01:38:48 -04:00
Douglas Christopher Wilson
6c2f7fb48d deps: finalhandler@0.3.2 2014-10-23 01:37:00 -04:00
Douglas Christopher Wilson
4dd970578a Fix res.send to mention res.sendStatus 2014-10-23 01:35:16 -04:00
Douglas Christopher Wilson
6f31218ecc Use content-disposition module 2014-10-17 23:45:58 -04:00
Douglas Christopher Wilson
6cd4859035 deps: finalhandler@0.3.1 2014-10-17 22:37:52 -04:00
Douglas Christopher Wilson
4f1cd4f73c deps: etag@~1.5.0 2014-10-17 22:37:49 -04:00
Douglas Christopher Wilson
f15bba7309 4.9.8 2014-10-17 22:01:51 -04:00
Alex Upadhyay
6f0302fb78 Fix res.redirect body when redirect status specified
fixes #2402
fixes #2404
2014-10-17 22:00:59 -04:00
Douglas Christopher Wilson
6f91416020 deps: accepts@~1.1.2 2014-10-16 01:29:00 -04:00
Douglas Christopher Wilson
2c5ed88c90 Merge tag '3.17.8' 2014-10-16 01:27:44 -04:00
Douglas Christopher Wilson
b0e4e641f9 4.9.7 2014-10-10 16:40:46 -04:00
Douglas Christopher Wilson
94f10c26cb Fix using same param name in array of paths
fixes #2389
2014-10-10 16:31:09 -04:00
Douglas Christopher Wilson
efd2dfb8c8 4.9.6 2014-10-08 22:33:13 -04:00
Douglas Christopher Wilson
3f2454e3df deps: type-is@~1.5.2 2014-10-08 21:51:10 -04:00
Douglas Christopher Wilson
61da3c7d0e deps: serve-static@~1.6.4 2014-10-08 21:50:08 -04:00
Douglas Christopher Wilson
2c140961ab deps: accepts@~1.1.1 2014-10-08 21:48:27 -04:00
Douglas Christopher Wilson
6aa4a450ed Merge tag '3.17.7' 2014-10-08 21:45:42 -04:00
Douglas Christopher Wilson
daadf6033b 4.9.5 2014-09-24 20:18:59 -04:00
Douglas Christopher Wilson
590c919204 deps: serve-static@~1.6.3 2014-09-24 20:16:00 -04:00
Douglas Christopher Wilson
3bcba79e2d deps: etag@~1.4.0 2014-09-24 20:14:39 -04:00
Douglas Christopher Wilson
b8c8ecebb7 Merge tag '3.17.5' 2014-09-24 20:11:19 -04:00
Douglas Christopher Wilson
8e46af1b1d 4.9.4 2014-09-19 23:07:58 -07:00
Douglas Christopher Wilson
e4fc09423e deps: qs@2.2.4 2014-09-19 23:06:31 -07:00
Douglas Christopher Wilson
0300b61fdd Merge tag '3.17.4' 2014-09-19 23:05:45 -07:00
Douglas Christopher Wilson
bc38d896ea 4.9.3 2014-09-18 10:45:35 -07:00
Douglas Christopher Wilson
b2518fe135 Merge tag '3.17.3' 2014-09-18 10:43:35 -07:00
Douglas Christopher Wilson
91891e3aee 4.9.2 2014-09-17 20:49:01 -07:00
Douglas Christopher Wilson
728917164c Fix router.use to accept array of middleware without path 2014-09-17 19:18:13 -07:00
Douglas Christopher Wilson
bf1980f1b4 Improve error message for bad app.use arguments 2014-09-17 19:18:10 -07:00
Douglas Christopher Wilson
3c1a964362 Fix regression for empty string path in app.use
fixes #2361
fixes #2362
2014-09-17 19:18:01 -07:00
Douglas Christopher Wilson
947fb8b274 4.9.1 2014-09-16 23:31:57 -07:00
Douglas Christopher Wilson
c5193536e5 deps: update example dependencies 2014-09-16 23:24:23 -07:00
Douglas Christopher Wilson
d08fd64190 deps: serve-static@~1.6.2 2014-09-16 23:23:14 -07:00
Douglas Christopher Wilson
2470ae6c72 deps: etag@~1.3.1 2014-09-16 23:21:45 -07:00
Douglas Christopher Wilson
916a75cf19 Merge tag '3.17.2' 2014-09-16 23:08:03 -07:00
Douglas Christopher Wilson
daacb749c1 deps: remove un-used buffer-crc32 dependency 2014-09-16 23:03:04 -07:00
Fei Yao
bb8abf1f90 Remove unused require in router match
closes #2358
2014-09-14 09:14:24 -07:00
Douglas Christopher Wilson
cf41a8f254 Fix app.use to accept array of middleware without path
fixes #2356
2014-09-12 17:46:49 -04:00
Douglas Christopher Wilson
1716e3b067 4.9.0 2014-09-09 00:32:17 -04:00
Seth Samuel
12f92a50dc Add res.sendStatus
closes #2269
closes #2297
closes #2340
2014-09-09 00:24:11 -04:00
Douglas Christopher Wilson
51d33edb79 Use etag to generate ETag headers 2014-09-09 00:13:49 -04:00
Douglas Christopher Wilson
2a0c35a108 Invoke callback for sendfile when client aborts
fixes #2189
fixes #2300
closes #2303
closes #2305
2014-09-09 00:12:49 -04:00
Douglas Christopher Wilson
d4de82b853 deps: accepts@~1.1.0 2014-09-09 00:12:10 -04:00
Douglas Christopher Wilson
e2102263ce deps: serve-static@~1.6.1 2014-09-09 00:11:04 -04:00
Douglas Christopher Wilson
d2b1a89b4a deps: type-is@~1.5.1 2014-09-09 00:10:02 -04:00
Douglas Christopher Wilson
d9937c628a deps: finalhandler@0.2.0 2014-09-09 00:08:07 -04:00
Douglas Christopher Wilson
276db8c49a deps: update example dependencies 2014-09-09 00:06:27 -04:00
Douglas Christopher Wilson
1768d94a1a deps: qs@2.2.3 2014-09-09 00:04:08 -04:00
Douglas Christopher Wilson
6bc7574ab5 docs: typo fixes
closes #2316
2014-09-08 23:53:21 -04:00
Douglas Christopher Wilson
3dca534995 Merge tag '3.17.1' 2014-09-08 23:48:59 -04:00
lemmy
d2d0afff64 Remove unused variable
closes #2345
2014-09-08 20:59:03 -04:00
Douglas Christopher Wilson
33bb8fc4b6 examples: fix up route-separation code
closes #2341
2014-09-08 20:51:32 -04:00
Douglas Christopher Wilson
621d074bd8 4.8.8 2014-09-05 02:26:12 -04:00
Douglas Christopher Wilson
d7e7b2e7d7 deps: update example dependencies 2014-09-05 02:24:02 -04:00
Douglas Christopher Wilson
2d6b735b4f deps: serve-static@~1.5.4 2014-09-05 02:21:27 -04:00
Douglas Christopher Wilson
a3115882d4 Merge tag '3.16.10' 2014-09-05 02:20:02 -04:00
Douglas Christopher Wilson
46f0bfc65f 4.8.7 2014-08-30 01:37:52 -04:00
Douglas Christopher Wilson
0b49e7f1fd deps: update example dependencies 2014-08-30 01:33:05 -04:00
Douglas Christopher Wilson
f6f47f428c deps: qs@2.2.2 2014-08-30 01:30:56 -04:00
Douglas Christopher Wilson
20635d03fc Merge tag '3.16.9' 2014-08-30 01:28:38 -04:00
Douglas Christopher Wilson
b6ae091bdf 4.8.6 2014-08-27 21:51:37 -04:00
Douglas Christopher Wilson
a206b4e273 deps: update example dependencies 2014-08-27 21:25:56 -04:00
Douglas Christopher Wilson
2b2733c235 deps: qs@2.2.0 2014-08-27 21:22:41 -04:00
Douglas Christopher Wilson
7fb7bcc0f7 Merge tag '3.16.8' 2014-08-27 21:20:53 -04:00
Douglas Christopher Wilson
4986b1cb4c tests: add some res.sendfile directory tests 2014-08-24 13:28:39 -04:00
Douglas Christopher Wilson
3de4e4276d docs: fix logo link 2014-08-24 10:05:24 -04:00
Douglas Christopher Wilson
27f195374d 4.8.5 2014-08-18 23:05:16 -04:00
Douglas Christopher Wilson
ff0de5eb27 deps: update example dependencies 2014-08-18 23:00:01 -04:00
Douglas Christopher Wilson
f4ddef1570 deps: serve-static@~1.5.3 2014-08-18 22:58:47 -04:00
Douglas Christopher Wilson
9eafaa23d8 Merge tag '3.16.7' 2014-08-18 22:54:25 -04:00
Douglas Christopher Wilson
0cf02d4667 4.8.4 2014-08-15 00:26:39 -04:00
Douglas Christopher Wilson
ef52b80d75 deps: update example dependencies 2014-08-15 00:24:28 -04:00
Douglas Christopher Wilson
1ca01c0c47 tests: add router.use validation tests
closes #2299
2014-08-15 00:22:54 -04:00
Douglas Christopher Wilson
fbceae2716 tests: add additional res.sendFile test
closes #2298
2014-08-15 00:18:54 -04:00
Douglas Christopher Wilson
ad3ca25c58 deps: qs@1.2.2 2014-08-15 00:16:20 -04:00
Douglas Christopher Wilson
666ffc62d8 deps: serve-static@~1.5.2 2014-08-15 00:15:28 -04:00
Douglas Christopher Wilson
6680132392 Merge tag '3.16.6' 2014-08-15 00:14:42 -04:00
Douglas Christopher Wilson
1643ae442c 4.8.3 2014-08-10 22:30:07 -04:00
Douglas Christopher Wilson
2594f3103b deps: serve-static@~1.5.1 2014-08-10 22:29:24 -04:00
Douglas Christopher Wilson
8473b3c338 deps: qs@1.2.1 2014-08-10 22:27:42 -04:00
Douglas Christopher Wilson
59cb99e9be Merge tag '3.16.4' 2014-08-10 22:26:49 -04:00
Douglas Christopher Wilson
22ca953e96 4.8.2 2014-08-07 12:05:02 -04:00
Douglas Christopher Wilson
7989c883fe deps: qs@1.2.0 2014-08-07 12:03:53 -04:00
Douglas Christopher Wilson
e05a52078a Merge tag '3.16.2' 2014-08-07 12:01:08 -04:00
Douglas Christopher Wilson
552b441f8a 4.8.1 2014-08-06 18:21:55 -04:00
Douglas Christopher Wilson
e8f8ea7e05 docs: update examples for deprecations 2014-08-06 18:13:54 -04:00
Douglas Christopher Wilson
4f5b27dd81 deps: update example dependencies 2014-08-06 18:10:32 -04:00
Douglas Christopher Wilson
cca88a7c47 Merge tag '3.16.1' 2014-08-06 18:09:15 -04:00
Douglas Christopher Wilson
a3b5adcf4a deps: qs@1.1.0 2014-08-06 17:50:08 -04:00
Douglas Christopher Wilson
1150ca7264 Fix incorrect deprecation warnings on res.download
fixes #2284
2014-08-06 17:48:36 -04:00
Douglas Christopher Wilson
4aea02310a 4.8.0 2014-08-06 02:50:59 -04:00
Fabien Franzen
17cea29013 Support mounted app as any argument to app.use()
fixes #2277
2014-08-06 02:49:06 -04:00
Douglas Christopher Wilson
8449f23f0d Deprecate res.sendfile 2014-08-06 02:27:16 -04:00
Douglas Christopher Wilson
2cb029f896 Add res.sendFile
fixes #1906
closes #2266
2014-08-06 02:26:51 -04:00
Douglas Christopher Wilson
7e32fa1be6 deps: update example dependencies 2014-08-06 01:59:09 -04:00
Douglas Christopher Wilson
1168d0bb8b deps: qs@1.0.2 2014-08-06 01:58:32 -04:00
Douglas Christopher Wilson
7d0f1c3db9 deps: serve-static@~1.5.0 2014-08-06 01:57:15 -04:00
Douglas Christopher Wilson
19abf7684b Merge tag '3.16.0' 2014-08-06 01:55:45 -04:00
Douglas Christopher Wilson
12e070e39a tests: add encoding tests for res.sendfile 2014-08-04 17:38:04 -04:00
Douglas Christopher Wilson
b886eb52cf 4.7.4 2014-08-04 17:36:37 -04:00
Douglas Christopher Wilson
d8237b976b Merge tag '3.15.3' into 4.7.x 2014-08-04 17:35:42 -04:00
Douglas Christopher Wilson
df413a41f3 deps: serve-static@~1.4.4 2014-08-04 17:14:32 -04:00
Douglas Christopher Wilson
52775a52ad 4.7.3 2014-08-04 16:14:29 -04:00
Douglas Christopher Wilson
112bc92d78 deps: serve-static@~1.4.3 2014-08-04 16:11:52 -04:00
Douglas Christopher Wilson
d8df26680f deps: send@0.7.3 2014-08-04 16:10:32 -04:00
Douglas Christopher Wilson
1854a5d35f 4.7.2 2014-07-27 16:00:54 -04:00
Douglas Christopher Wilson
54d3ffa9a0 deps: update example dependencies 2014-07-27 16:00:17 -04:00
Douglas Christopher Wilson
0ee4dd82b5 deps: serve-static@~1.4.2 2014-07-27 15:59:19 -04:00
Douglas Christopher Wilson
454c4b2350 Merge tag '3.15.2' 2014-07-27 15:58:45 -04:00
Douglas Christopher Wilson
8858f20d93 4.7.1 2014-07-26 18:53:26 -04:00
Douglas Christopher Wilson
65f67e2ec0 deps: serve-static@~1.4.1 2014-07-26 18:08:02 -04:00
Douglas Christopher Wilson
8e63521f68 Merge tag '3.15.1' 2014-07-26 18:06:11 -04:00
Douglas Christopher Wilson
1a9a837c45 4.7.0 2014-07-25 20:26:11 -04:00
Douglas Christopher Wilson
ab8d116f42 tests: bail on failed test for developer 2014-07-23 18:17:31 -04:00
Douglas Christopher Wilson
d0b6b3dfcf tests: change Route tests to use callback 2014-07-23 17:28:14 -04:00
Douglas Christopher Wilson
f34944c539 Merge tag '3.15.0' 2014-07-23 16:15:00 -04:00
Ashley Streb
11c74d72eb Fix req.protocol for proxy-direct connections
fixes #2252
2014-07-23 16:08:20 -04:00
Douglas Christopher Wilson
035685918c deps: serve-static@~1.4.0 2014-07-23 14:56:27 -04:00
Douglas Christopher Wilson
88cffadcaa deps: send@0.7.0 2014-07-23 14:54:33 -04:00
Douglas Christopher Wilson
3b7ca43170 deps: jade@~1.5.0 2014-07-23 14:01:44 -04:00
Douglas Christopher Wilson
7cd86a01da deps: update example dependencies 2014-07-23 13:04:07 -04:00
Douglas Christopher Wilson
dc054d190a deps: parseurl@~1.2.0 2014-07-23 12:55:56 -04:00
Douglas Christopher Wilson
9019424725 deps: depd@0.4.2 2014-07-23 12:53:29 -04:00
Douglas Christopher Wilson
fd3b40533b Deprecate combined status, response signatures
closes #2227
2014-07-17 22:49:41 -04:00
Douglas Christopher Wilson
21bb2ef30e deps: finalhandler@0.1.0 2014-07-16 20:47:24 -04:00
Douglas Christopher Wilson
da4c639954 deps: debug@1.0.4 2014-07-16 20:44:17 -04:00
Douglas Christopher Wilson
d046208ca2 build: add Young Jae Sim as contributor 2014-07-16 13:31:35 -04:00
Young Jae Sim
04f383087f docs: add expressjs.kr(expressjs.com in Korean)
closes #2242
closes #2244
2014-07-16 13:31:34 -04:00
Vasilyev Dmitry
fd86ab8da2 build: fix up jsdoc return values
closes #2243
2014-07-16 09:05:57 -04:00
Douglas Christopher Wilson
e29fa25bb4 Add configurable query parser
closes #2215
2014-07-13 23:15:00 -04:00
Douglas Christopher Wilson
b43205ca98 perf: prevent multiple Buffer creation in res.send 2014-07-13 21:14:30 -04:00
Douglas Christopher Wilson
112dbb2ab4 4.6.1 2014-07-12 22:11:48 -04:00
Douglas Christopher Wilson
3e32721e24 Fix subapp.mountpath regression for app.use(subapp)
fixes #2233
2014-07-12 22:07:43 -04:00
Douglas Christopher Wilson
8ba3f39b33 4.6.0 2014-07-11 23:31:30 -04:00
Douglas Christopher Wilson
82bdbad5e0 deps: finalhandler@0.0.3 2014-07-11 23:00:09 -04:00
Douglas Christopher Wilson
d29cf4d5e3 deps: serve-static@~1.3.2 2014-07-11 22:49:49 -04:00
Douglas Christopher Wilson
1623936a25 deps: send@0.6.0 2014-07-11 22:48:42 -04:00
Douglas Christopher Wilson
fa6a40526a deps: update example dependencies 2014-07-11 22:46:25 -04:00
Douglas Christopher Wilson
c6e6203020 perf: fix arguments reassign deopt in some res methods 2014-07-11 17:13:07 -04:00
Douglas Christopher Wilson
997a558a73 Accept multiple callbacks to app.use()
fixes #2224
2014-07-11 17:13:06 -04:00
Douglas Christopher Wilson
a01326adac Catch errors in multiple req.param(name, fn) handlers 2014-07-11 17:12:57 -04:00
Douglas Christopher Wilson
76e8bfa1dc router: refactor location of try blocks 2014-07-11 16:38:03 -04:00
Douglas Christopher Wilson
8dc67af606 router: speed up standard app.use(fn) 2014-07-11 16:37:10 -04:00
Douglas Christopher Wilson
996d319263 router: fix optimization on router exit 2014-07-11 16:36:20 -04:00
Douglas Christopher Wilson
1c3bd36be6 Support non-string path in app.use(path, fn)
fixes #2207
2014-07-11 16:35:37 -04:00
Douglas Christopher Wilson
4ea6f21b02 Merge tag '3.14.0' 2014-07-11 16:28:37 -04:00
Douglas Christopher Wilson
ec5b9f5c61 tests: add test for error handler in route
closes #2228
2014-07-11 09:35:20 -04:00
Ryan Seys
4fe1073f10 docs: fix nodejs.org link
closes #2222
2014-07-09 00:50:33 -04:00
Douglas Christopher Wilson
968b00c3d7 tests: add missing FQDN router URL tests 2014-07-08 19:40:22 -04:00
Douglas Christopher Wilson
ef497fdae4 tests: add mounting to strict routing test 2014-07-07 23:25:05 -04:00
Douglas Christopher Wilson
bcdeee2df5 4.5.1 2014-07-06 19:48:18 -04:00
Douglas Christopher Wilson
23a49ff61e Fix routing regression when altering req.method 2014-07-06 19:44:43 -04:00
Douglas Christopher Wilson
b4b2efee0f tests: add more app.use tests 2014-07-05 11:32:44 -04:00
Douglas Christopher Wilson
92c45199bd 4.5.0 2014-07-04 21:03:07 -04:00
Fishrock123
bd6908516d docs: cleanup readme, update package description
closes #2210
2014-07-04 17:05:48 -04:00
Douglas Christopher Wilson
e6eeec3f03 Add req.hostname
closes #2179
2014-07-04 14:00:37 -04:00
Douglas Christopher Wilson
269dc5323f Invoke router.param() only when route matches
fixes #2206
2014-07-04 13:46:23 -04:00
Douglas Christopher Wilson
efbc3f95ee deps: accepts@~1.0.7 2014-07-04 12:51:44 -04:00
Douglas Christopher Wilson
99e839a274 deps: update example dependencies 2014-07-04 01:24:42 -04:00
Douglas Christopher Wilson
32dbda1460 deps: istanbul@0.2.14 2014-07-04 01:23:14 -04:00
Douglas Christopher Wilson
bcee730354 Merge tag '3.13.0' 2014-07-04 01:14:40 -04:00
Douglas Christopher Wilson
ce3d1fe07e Add headers option to res.sendfile 2014-07-03 12:53:49 -04:00
Douglas Christopher Wilson
3136e98dce deps: send@0.5.0 2014-07-03 11:18:35 -04:00
Douglas Christopher Wilson
d1b1dfd472 deps: serve-static@~1.3.0 2014-07-03 11:11:18 -04:00
Douglas Christopher Wilson
ca306eace1 deps: update example dependencies 2014-07-03 10:49:53 -04:00
Douglas Christopher Wilson
fd35351594 Add mergeParams option to Router
fixes #2153
fixes #2203
2014-07-03 01:13:09 -04:00
Douglas Christopher Wilson
8a15f83d72 Merge tag '3.12.1' 2014-06-26 20:31:51 -04:00
Douglas Christopher Wilson
d91bf81c31 Merge tag '4.4.5' 2014-06-26 20:29:54 -04:00
Douglas Christopher Wilson
fd27f1f4e1 4.4.5 2014-06-26 20:26:43 -04:00
Douglas Christopher Wilson
f0ad557987 deps: cookie-signature@1.0.4 2014-06-26 20:25:20 -04:00
Douglas Christopher Wilson
81036aa639 deps: finalhandler@0.0.2 2014-06-24 21:19:03 -04:00
Douglas Christopher Wilson
e7caaf6757 deps: type-is@~1.3.2 2014-06-24 21:18:12 -04:00
Douglas Christopher Wilson
a525252690 deps: istanbul@0.2.11 2014-06-24 21:15:43 -04:00
Douglas Christopher Wilson
0ebfc6b7bf tests: add test for OPTIONS in app.all 2014-06-23 20:35:44 -04:00
Douglas Christopher Wilson
381b3b0f77 add deprecation message to res.vary() 2014-06-23 16:26:28 -04:00
Douglas Christopher Wilson
ba8a4c5a8d add deprecation message to res.send(body, status) 2014-06-23 16:26:00 -04:00
Douglas Christopher Wilson
2cccbc186e add deprecation message to non-plural req.accepts* 2014-06-23 16:17:44 -04:00
Carlos Souza
83bbf0902d examples: tweak cors example
The PUT method needs clearance from the server, unlike GET, HEAD
and POST, so this demonstrates a case where the method in the
response is important.

closes #2195
2014-06-23 13:37:30 -04:00
Douglas Christopher Wilson
10618ced22 Reduce try-catch de-op area in param matching 2014-06-22 12:02:41 -04:00
Douglas Christopher Wilson
7f26cfca91 Fix handling when route.all is only route 2014-06-22 12:02:40 -04:00
Douglas Christopher Wilson
b89a597029 Restore req.params after invoking Router
fixes #2163
2014-06-22 12:02:36 -04:00
Guy Ellis Monster
746044b6c2 Replace __defineGetter__ with Object.defineProperty
closes #2162
2014-06-22 12:02:33 -04:00
Douglas Christopher Wilson
bdfd288eec fix behavior when handling request without routes
fixes #2159
2014-06-22 12:02:32 -04:00
Douglas Christopher Wilson
7e01531e50 use finalhandler for final response handling 2014-06-22 12:01:55 -04:00
Douglas Christopher Wilson
3ffceff3ed Merge tag '3.12.0' 2014-06-22 11:42:15 -04:00
Douglas Christopher Wilson
f498b660da 4.4.4 2014-06-20 16:56:51 -04:00
刘星
e606d99dc8 Fix res.attachment Unicode filenames in Safari
closes #2188
2014-06-20 16:55:05 -04:00
Douglas Christopher Wilson
6aba1b4c49 deps: accepts@~1.0.5 2014-06-20 16:44:50 -04:00
Douglas Christopher Wilson
6ee9433f29 deps: update example dependencies 2014-06-20 16:43:04 -04:00
Douglas Christopher Wilson
ffe663aedf deps: buffer-crc32@0.2.3 2014-06-20 00:35:38 -04:00
Douglas Christopher Wilson
8258ce14f4 fix "trim prefix" debug message in express:router
closes #2177
2014-06-14 12:57:32 -04:00
Douglas Christopher Wilson
ac573cf830 4.4.3 2014-06-12 00:41:24 -04:00
Douglas Christopher Wilson
e799c0fb7b Merge tag '3.10.5' 2014-06-12 00:38:29 -04:00
Douglas Christopher Wilson
c361a06bd4 deps: serve-static@1.2.3 2014-06-12 00:17:28 -04:00
Douglas Christopher Wilson
3428543bb8 deps: accepts@1.0.3 2014-06-12 00:16:05 -04:00
Douglas Christopher Wilson
9cdbc80522 deps: send@0.4.3 2014-06-12 00:14:36 -04:00
Douglas Christopher Wilson
6775658ed5 Fix persistence of req.params from app.params
fixes #2170
2014-06-11 18:15:09 -04:00
Douglas Christopher Wilson
7df7f7a575 deps: debug@1.0.2 2014-06-11 17:53:56 -04:00
Douglas Christopher Wilson
7daae1912b 4.4.2 2014-06-09 20:40:39 -04:00
Douglas Christopher Wilson
3205f68510 deps: update example dependencies 2014-06-09 20:39:34 -04:00
Douglas Christopher Wilson
898dcfac8b Merge tag '3.10.4' 2014-06-09 20:39:22 -04:00
Douglas Christopher Wilson
b1efa19f97 deps: update testing dependencies 2014-06-09 20:24:36 -04:00
Douglas Christopher Wilson
b45fd70f99 deps: send@0.4.2 2014-06-09 20:22:42 -04:00
Douglas Christopher Wilson
7f6c7a19c6 deps: serve-static@1.2.2 2014-06-09 20:21:31 -04:00
Douglas Christopher Wilson
142462d539 deps: debug@1.0.1 2014-06-09 20:20:50 -04:00
Douglas Christopher Wilson
4d3e0d88a2 Fix catching errors from top-level handlers 2014-06-09 09:44:37 -04:00
Nick Heiner
253ce4837a Use path.resolve for views dir instead of concat
closes #2165
2014-06-08 17:41:36 -04:00
Joshua Goldberg
ad05eb8222 Fix typo in console.log in multipart example
closes #2164
2014-06-07 20:14:33 -04:00
Douglas Christopher Wilson
21393c244c tests: add more route tests 2014-06-06 11:12:52 -04:00
Douglas Christopher Wilson
4279e6ef45 improve before hook in mvc example 2014-06-06 10:42:29 -04:00
Douglas Christopher Wilson
3db6dd752f change confusing 404 handling in download example 2014-06-06 10:23:47 -04:00
Douglas Christopher Wilson
fcbe68eeb5 docs: move badges 2014-06-06 00:41:08 -04:00
Douglas Christopher Wilson
5019f38e29 tests: add more tests 2014-06-06 00:38:14 -04:00
Douglas Christopher Wilson
9bf1247716 Merge tag '3.10.3' 2014-06-05 23:45:31 -04:00
Douglas Christopher Wilson
980a15d847 deps: type-is@1.2.1 2014-06-05 19:40:27 -04:00
Douglas Christopher Wilson
bffb71d4c8 deps: proxy-addr@1.0.1 2014-06-03 17:25:20 -04:00
Douglas Christopher Wilson
402ec83157 Merge tag '3.10.0' 2014-06-03 00:47:39 -04:00
Douglas Christopher Wilson
f9ec70edd0 4.4.1 2014-06-02 21:13:50 -04:00
Douglas Christopher Wilson
9e5a758e7c deps: update example dependencies 2014-06-02 20:59:45 -04:00
Douglas Christopher Wilson
492e933796 deps: serve-static@1.2.1 2014-06-02 20:50:54 -04:00
Douglas Christopher Wilson
8ccd9d0eb5 deps: send@0.4.1 2014-06-02 20:49:11 -04:00
Douglas Christopher Wilson
16fdc11ccb deps: methods@1.0.1 2014-06-02 20:48:18 -04:00
Douglas Christopher Wilson
9e6b881f85 remove jsdoc params for polymorphic functions
until jsdoc has a way to actually document them

closes #2156
2014-06-02 10:26:15 -04:00
Douglas Christopher Wilson
95fa49147b 4.4.0 2014-05-31 00:00:39 -04:00
Douglas Christopher Wilson
f665c57c5c update serve-static to 1.2.0 2014-05-30 22:53:02 -04:00
Douglas Christopher Wilson
9024d24e81 deps: supertest@~0.13.0 2014-05-30 22:50:22 -04:00
Douglas Christopher Wilson
f92a7ad0a3 update accepts to 1.0.2 2014-05-30 22:48:32 -04:00
Douglas Christopher Wilson
db4448dda8 Merge tag '3.9.0' 2014-05-30 22:17:51 -04:00
Douglas Christopher Wilson
311e83e591 4.3.2 2014-05-29 00:17:21 -04:00
Douglas Christopher Wilson
fb2d918056 fix handling of errors from param callbacks
fixes #2149
2014-05-28 22:26:05 -04:00
Douglas Christopher Wilson
dfefea5e9d update example dependencies 2014-05-27 23:51:47 -04:00
Douglas Christopher Wilson
3fbab91231 Merge tag '3.8.1' 2014-05-27 23:49:47 -04:00
Douglas Christopher Wilson
87e02c30e7 4.3.1 2014-05-23 19:11:28 -04:00
Douglas Christopher Wilson
c3470c9c96 tests: add route ordering test 2014-05-23 18:46:00 -04:00
Douglas Christopher Wilson
7f049164b7 Revert "fix behavior of multiple app.VERB for the same path"
This reverts commit 31b2e2d7b4.

fixes #2133
2014-05-23 18:35:20 -04:00
Douglas Christopher Wilson
4e12a72873 4.3.0 2014-05-21 02:13:03 -04:00
Douglas Christopher Wilson
91e0c27252 update example dependencies 2014-05-21 02:11:31 -04:00
Douglas Christopher Wilson
db4a061ed6 Merge tag '3.8.0' 2014-05-21 02:08:04 -04:00
Douglas Christopher Wilson
e7e2592357 tests: add more app.param tests 2014-05-20 10:58:39 -04:00
Douglas Christopher Wilson
739586f96a add req.baseUrl to access stripped path in routes
fixes #2078
2014-05-19 00:39:26 -04:00
Douglas Christopher Wilson
4c0f1f53d3 update example dependencies 2014-05-18 23:07:59 -04:00
Douglas Christopher Wilson
9354ab62dd build: prevent failure from coveralls 2014-05-18 23:02:25 -04:00
Douglas Christopher Wilson
23ff74bb3f tests: flow control with after 2014-05-18 16:33:11 -04:00
Douglas Christopher Wilson
98d17e2293 invoke router.param() only when necessary
fixes #2121
2014-05-18 16:21:01 -04:00
Douglas Christopher Wilson
ababa6ae5b fix issue routing requests among sub routers
fixes #2121
2014-05-18 15:27:28 -04:00
Douglas Christopher Wilson
097cd0c242 Merge tag '3.7.0' 2014-05-18 11:21:30 -04:00
Douglas Christopher Wilson
31b2e2d7b4 fix behavior of multiple app.VERB for the same path
fixes #2116
2014-05-16 15:09:42 -04:00
Douglas Christopher Wilson
8fe8d74056 update type-is to 1.2.0 2014-05-14 00:25:39 -04:00
Douglas Christopher Wilson
fcc4742056 build: ignore Contributing 2014-05-14 00:22:47 -04:00
Roman Shtylman
d37ffa1149 add Contributing.md
Hopefully this will guide some users when posting new issues. Feel free
to close any issues which don't follow the guidelines.
2014-05-12 15:45:54 -04:00
Douglas Christopher Wilson
cf709f3021 4.2.0 2014-05-11 22:00:30 -04:00
Douglas Christopher Wilson
7515ee6a78 deps: pin debug 2014-05-11 21:29:29 -04:00
Douglas Christopher Wilson
b8d6d258b0 update example dependencies 2014-05-11 21:25:42 -04:00
Douglas Christopher Wilson
35c50601bd Merge tag '3.6.0' 2014-05-09 17:33:26 -04:00
Douglas Christopher Wilson
bc9bcb0317 Fix req.next when inside router instance
fixes #2016
2014-05-09 16:53:15 -04:00
Douglas Christopher Wilson
e4302b2120 tests: fixup new json tests 2014-05-08 23:22:18 -04:00
Douglas Christopher Wilson
3d6b4ba013 update example dependencies 2014-05-08 22:08:49 -04:00
Douglas Christopher Wilson
555ffe37b2 update history with dep history 2014-05-08 14:57:44 -04:00
Douglas Christopher Wilson
165578a1da update history 2014-05-08 14:48:24 -04:00
Douglas Christopher Wilson
0bbbc84959 Merge branch '4.1.x' 2014-05-08 14:45:47 -04:00
Douglas Christopher Wilson
92d37671c5 4.1.2 2014-05-08 14:42:44 -04:00
Douglas Christopher Wilson
2901bd6916 Merge branch '3.5.x' into 4.1.x 2014-05-08 14:01:02 -04:00
Alberto Leal
be997fd654 Keep previous Content-Type for res.jsonp
closes #2094
2014-05-02 15:01:19 -04:00
Douglas Christopher Wilson
5c3852b91c tests: remove unused image fixture
closes #2091
2014-05-02 09:00:36 -04:00
Tiago Relvao
3c7310ebcb Include ETag in HEAD requests
fixes #2083
2014-04-30 09:34:10 -04:00
Douglas Christopher Wilson
61f2929a35 4.1.1 2014-04-27 19:49:05 -04:00
Douglas Christopher Wilson
c054581370 fix package.json to reflect supported node version
closes #2080
2014-04-27 19:46:53 -04:00
Douglas Christopher Wilson
dbea8312bb 4.1.0 2014-04-24 18:13:41 -04:00
Douglas Christopher Wilson
1536a2196e preserve casing of headers in res.header and res.set
fixes #2063
2014-04-24 18:00:43 -04:00
Douglas Christopher Wilson
374e6c3789 fix multipart example
closes #2061
2014-04-24 17:50:20 -04:00
Douglas Christopher Wilson
203fb05d3e update example dependencies 2014-04-24 17:05:20 -04:00
Douglas Christopher Wilson
ce8555c690 update should to 3.3.1 2014-04-24 16:51:49 -04:00
Douglas Christopher Wilson
9863fa0903 update serve-static to 1.1.0 2014-04-24 16:46:51 -04:00
Douglas Christopher Wilson
2fd3e72a19 Pass options from res.sendfile to send
fixes #2017
2014-04-24 16:44:06 -04:00
Douglas Christopher Wilson
8ccceacf91 Merge branch '3.x' 2014-04-24 16:43:51 -04:00
Douglas Christopher Wilson
6ac6305b53 Merge branch '3.x' into HEAD 2014-04-24 15:42:41 -04:00
Roman Shtylman
29e8ccef4e Merge pull request #2067 from swrh/mvc-example-ejs-to-jade
MVC example: EJS -> Jade.
2014-04-23 10:21:26 -04:00
Fernando Silveira
ce17efd95b MVC example: EJS -> Jade. 2014-04-23 00:13:26 -03:00
Roman Shtylman
5480cb9571 Merge pull request #2060 from swrh/master
examples: Fix bugs in MVC example
2014-04-22 23:09:49 -04:00
Fernando Silveira
b38ffd7376 Fixing bug in MVC example pet view. 2014-04-22 23:30:17 -03:00
Fernando Silveira
8d8f44f352 Fix "method-override" dependency.
Depend on method-override@1.0.0 strictly, following the pattern for (almost) all other devDependencies.
2014-04-22 22:46:52 -03:00
Roman Shtylman
af5f21b2e2 Merge pull request #2065 from WebReflection/patch-1
trim_prefix causing --use-strict flag to fail
2014-04-22 20:23:58 -04:00
Andrea Giammarchi
4ac7474e4e trim_prefix causing --use-strict flag to fail
as specified in bug #2064 the `trim_prefix` function declaration within the `try/catch` causes problems when starting express with `--use_strict` directive.
2014-04-22 17:02:54 -07:00
Roman Shtylman
bdb3bb98f6 Merge pull request #2058 from thetalecrafter/content-disposition
support non-ascii filenames in content-disposition headers
2014-04-21 22:12:38 -04:00
Fernando Silveira
896609c859 Fixing bug when updating pet name in MVC example. 2014-04-21 12:10:21 -03:00
Fernando Silveira
50158b851c Express 4 now uses "method-override" external library. 2014-04-21 12:08:34 -03:00
Andy VanWagoner
56b672e657 support non-ascii filenames in content-disposition headers 2014-04-19 21:16:11 -06:00
Jonathan Ong
b9e9576083 Readme: add Roman as lead maintainer
so people start emailing him instead of TJ :D
2014-04-18 00:28:43 -07:00
Chris Andrejewski
79cc5a4d27 make old middleware properties configurable
closes #2054
2014-04-16 08:49:08 -04:00
Roman Shtylman
5f1d57704e Merge pull request #2053 from shawnzhu/fix-xhr-test
improve req.xhr test by verifying status code
2014-04-15 09:34:16 -04:00
Ke Zhu
19983272f3 improve req.xhr test by verifying status code 2014-04-15 00:11:20 -04:00
Roman Shtylman
e1ab302234 Merge pull request #2047 from Pana/patch-1
remove one feature description
2014-04-14 10:51:35 -04:00
Wang
6b1c443212 remove one feature description 2014-04-13 22:05:49 +08:00
Jonathan Ong
b79a271553 update type-is@1.1.0 2014-04-12 17:25:33 -07:00
Douglas Christopher Wilson
260141ee08 add soft testing on node.js 0.11 2014-04-10 17:04:19 -04:00
Douglas Christopher Wilson
fb1232043d update cookie to 0.1.1 2014-04-10 16:59:41 -04:00
Douglas Christopher Wilson
2377fc8bcf update serve-static to 1.0.4 2014-04-10 16:59:40 -04:00
Douglas Christopher Wilson
c610902b67 update accepts to 1.0.1 2014-04-10 16:59:38 -04:00
Douglas Christopher Wilson
a802405e19 update type-is to 1.0.1 2014-04-10 16:59:36 -04:00
Douglas Christopher Wilson
0dbaacfe12 update history 2014-04-10 16:57:00 -04:00
Roman Shtylman
b8dd60dec7 update readme to v4 release
- remove 3.0.0 from logo
- remove RC status for v4

close #2036
2014-04-10 09:57:30 -04:00
Roman Shtylman
147c2507c3 4.0.0 2014-04-09 16:38:40 -04:00
Roman Shtylman
d72f27909f handle thrown errors inside Route
close #2029
2014-04-08 14:50:26 -04:00
Roman Shtylman
1ee5329b1c Merge pull request #2025 from seanlinsley/patch-1
Use SVG badges in Readme
2014-04-05 17:08:09 -04:00
Sean Linsley
ba0b046a95 Use SVG badges in Readme 2014-04-05 15:35:46 -05:00
Jonathan Ong
412eb2a9ce Merge pull request #2018 from Devrama/patch-1
This example does not work with express 4.x.
2014-03-31 17:09:15 -07:00
WON JONG YOO
dd8e279cac Not work..
This example does not work with express 4.x.
bodyParser() does not have multipart() anymore.
Multiparty module and middleware are added.
2014-03-31 16:52:22 -04:00
Jonathan Ong
642432cb5e Merge pull request #2013 from kentcdodds/patch-1
Tell me what I'm using that isn't allowed
2014-03-28 22:57:03 -07:00
Kent C. Dodds
001c9380be Tell me what I'm using that isn't allowed
I'm migrating and it would be useful in a large application to know what I'm using that's not allowed. I think lots of people would feel this way. Let me know if you would prefer a different implementation.
2014-03-28 06:19:29 -06:00
Jonathan Ong
2e830fff99 Merge pull request #2008 from agchou/clean-up-code
some code clean up
2014-03-27 15:22:49 -07:00
agchou
06dcb22ae2 clean up code consistency 2014-03-27 09:15:27 -07:00
Jonathan Ong
0120874b8e Merge pull request #2004 from agchou/clean-up-code
some code clean up
2014-03-25 15:30:34 -07:00
agchou
13475977af some code cleanup 2014-03-25 15:23:04 -07:00
Roman Shtylman
e36746363a 4.0.0-rc4 2014-03-24 22:53:35 -04:00
Roman Shtylman
1eba854f23 support arrays as middleware arguments to .VERB and .all
Express 3.x supported passing in arrays for sets of common middleware.
While there are better ways to do this, removing this feature causes
headache in upgrading for no real gain. We can support it without much
more code.
2014-03-23 21:29:59 -04:00
Roman Shtylman
6b19e3dc0a remove deprecation message about passing path as array 2014-03-23 21:07:37 -04:00
Roman Shtylman
cb1fbce46b don't call done twice for thrown errors inside parameterized routes
fixes #1995
2014-03-23 14:42:46 -04:00
Roman Shtylman
cc38cccae1 Merge pull request #1984 from blakeembrey/params-update
Override params each layer
2014-03-18 20:45:27 -04:00
Blake Embrey
efbe1779e3 Override params every layer. 2014-03-17 15:16:26 -03:00
Roman Shtylman
8e3d0a6569 remove license text from readme 2014-03-13 20:20:04 -04:00
Roman Shtylman
8bd5d54b0e update license year, tired of all the fluff issues about this 2014-03-13 16:27:34 -04:00
Roman Shtylman
4867cf1e7b Merge pull request #1964 from blakeembrey/modular-routing
keep route params from previous middleware matches
2014-03-13 12:29:48 -04:00
Roman Shtylman
3ea3250dbe examples: remove reference to app.router in static-files
closes #1974
2014-03-12 10:27:10 -04:00
Roman Shtylman
3bbcbfdcf9 4.0.0-rc3 2014-03-11 21:39:01 -04:00
Blake Embrey
c7e84d8044 Clean up code and syntax issues. 2014-03-10 13:19:03 -04:00
Blake Embrey
9ae1d0d22d Remove redundant .all function. 2014-03-10 13:18:23 -04:00
Blake Embrey
51e80ffd48 Add tests for dynamic mounting. 2014-03-10 13:16:39 -04:00
Blake Embrey
be52dbbaa1 Allow dynamic mounting with .use.
Retains params from the parent application.
2014-03-10 13:13:39 -04:00
Roman Shtylman
76147c78a1 change my contributor email to tag with expressjs 2014-03-09 22:49:33 -04:00
Jonathan Ong
59da745d6c add @jonathanong and @defunctzombie as contributors 2014-03-09 19:46:52 -07:00
Jonathan Ong
68996d7561 remove req.auth 2014-03-09 19:45:43 -07:00
Roman Shtylman
5e12bab5cc add better error messages for non-functions as middleware
Only functions are supported for [VERB](path, fn), use(path, fn) and
all(fn) calls in Router and Routes. This catches those errors earlier to
avoid checks during actual request processing.
2014-03-09 22:30:47 -04:00
Jonathan Ong
7693aa5464 use parseurl 2014-03-07 18:27:26 -08:00
Jonathan Ong
110f471efa lint 2014-03-07 18:04:03 -08:00
Jonathan Ong
2064f412cb remove res.charset usage 2014-03-07 16:46:54 -08:00
Jonathan Ong
3228fd3cbc remove res.charset support 2014-03-07 16:33:17 -08:00
Jonathan Ong
bad55f7977 move setHeader charset patch to .set
note that application/json no longer adds charset=utf-8. could be a
regression.

closes #1952
See also: https://github.com/broofa/node-mime/issues/86
2014-03-07 16:32:41 -08:00
Jonathan Ong
3cf7b2e39e refactor to use basic-auth 2014-03-07 16:18:51 -08:00
Jonathan Ong
b443da410a update History.md with 3.x branch 2014-03-06 14:59:36 -08:00
Jonathan Ong
b0351a08de Update History.md 2014-03-05 22:45:36 -08:00
Jonathan Ong
3321055025 use path-to-regexp 2014-03-05 22:35:55 -08:00
Jonathan Ong
5572897998 some jshint cleanup
some more errors but whatever
2014-03-05 22:24:35 -08:00
Jonathan Ong
3112f92d08 move the patch to the response proto 2014-03-05 22:20:58 -08:00
Jonathan Ong
74f55a863a remove .writeHead patch
no middleware uses the “header” event anymore
2014-03-05 22:17:25 -08:00
Jonathan Ong
9ea18e10c9 throw errors when users try to access removed middleware 2014-03-05 22:13:54 -08:00
Jonathan Ong
d84457b9c2 remoive legacy docs bin 2014-03-05 22:07:56 -08:00
Jonathan Ong
643397ed21 remove unnecessary test/support/http 2014-03-05 22:06:14 -08:00
Jonathan Ong
85bf9ab76a uncomment a commented out test
lol @visionmedia
2014-03-05 22:01:36 -08:00
Jonathan Ong
6ec1904aac use serve-static for static middleware 2014-03-05 21:58:49 -08:00
Roman Shtylman
f1315b9efa fix examples for express 4 (separate middleware)
close #1947
2014-03-05 10:36:05 -05:00
Jonathan Ong
a0e6bb5cb2 npm start to start the server! 2014-03-05 03:36:36 -08:00
Roman Shtylman
eaf63d94f0 4.0.0-rc2 2014-03-05 01:32:48 -05:00
Jonathan Ong
45500fba74 Update Readme.md 2014-03-04 21:32:22 -08:00
Jonathan Ong
8472effab3 Update Readme.md 2014-03-04 21:31:50 -08:00
Roman Shtylman
d368aed150 fix Route#all before Route#verb
Properly handle calling a VERB after using .all()

close #1945
2014-03-03 17:50:13 -05:00
Jonathan Ong
e3b60e80c0 Update Readme.md for Express 4 2014-03-02 23:32:51 -08:00
Roman Shtylman
9df10674f0 4.0.0-rc1 2014-03-02 11:17:29 -05:00
Roman Shtylman
e3617fb8ab Merge pull request #1941 from deiga/patch-1
Fixed deprecated example doctype
2014-03-01 10:08:32 -05:00
Timo Sand
0fbfce58c6 Fixed deprecated example doctype 2014-03-01 12:32:42 +02:00
Roman Shtylman
f8b954bcd9 make express.Router() return a Router function instance
Similar to how express() returns an express `app` instance which is also
a function, express.Router() returns the Router instance which is also a
function and can be easily used via another router or the app.

app.use(express.Router());
2014-02-26 20:22:11 -05:00
Roman Shtylman
caa25b506d Merge pull request #1935 from visionmedia/router-params-middleware
Router: add parameter handling to middleware
2014-02-25 12:35:13 -05:00
Roman Shtylman
6911815171 Router: add parameter handling to middleware
Middleware (.use) can now specify parameter arguments to trigger
Router.param loading. This is handy if you want to `.use` additional
routers but need to load certain objects before the mounted middleware
runs.
2014-02-23 19:21:13 -05:00
Roman Shtylman
0719e5f402 implement app.route() 2014-02-23 11:31:43 -05:00
Roman Shtylman
07b731add0 bump cookie parser dependency to 1.0.1 2014-02-22 09:26:30 -05:00
Roman Shtylman
d42d8f5b07 move support for multiple res.cookie calls to lib/response
Patch.js is simpler and follows upstream node.js closer as a result.
2014-02-22 09:26:30 -05:00
Roman Shtylman
143e72dd85 remove support for node 0.8 2014-02-22 09:26:30 -05:00
Roman Shtylman
6835289564 remove ServerResonse.headerSent monkey patch
node.js ServerResponse contains a headersSent field. Use that instead of
our patched misnamed version.
2014-02-22 09:26:29 -05:00
Roman Shtylman
1396e0855d remove last pieces of connect dependency
- copy over patch.js to shim ServerResponse
- bundle `static` middleware
2014-02-22 09:26:29 -05:00
Roman Shtylman
6a7363e4ae use local copy of parseUrl 2014-02-22 09:26:29 -05:00
Roman Shtylman
9bc63d92a0 move connect.query() into our repo 2014-02-22 09:26:29 -05:00
TJ Holowaychuk
6b05f60bad update node-fresh 2014-02-19 15:29:39 -08:00
Jonathan Ong
25e6629bcc update history 2014-02-08 11:40:48 -08:00
Jonathan Ong
0796c1d2d2 test app.router: ignore connect method
so tests pass in 0.11. 0.11 client seems to throw errors more often, so
this is not an issue with express or node’s servers.
2014-02-08 11:39:26 -08:00
Jonathan Ong
aac1d52c4f res.location: remove resolving relative urls
closes #1804

this is an unnecessary maintenance burden (see the number of removed
tests), especially when supporting mounting. browsers handle relative
locations, and so should all clients.

a regression could be absolute locations on a mounted app, but 1. we
can fix that later when someone complains and 2) code-smell
2014-02-08 11:37:43 -08:00
Roman Shtylman
f41d09a3cf remove app.router and refactor middleware processing
This is an overhaul of middleware processing, Router and Route. Connect is no
longer used to process the middleware stack. This functionality has been
split into two parts: middleware stack and default error response.

The entry point for request processing is the `app.handle` method. It
sets up the default error response handle (to run in the event of no
other error handler) and then triggers the app router (instance of
Router) to handle the request.

The app router `handle` function contains the middleware dispatch layer
previously in the connect codebase. This layer handle the logic for
dispatching `.use` calls (stripping paths if needed). The app contains a
base router `app._router`. New routes can be created and `.use`d on this
router to organize routes into files.

Routers now have the following methods `.use`, `.all`, `.param` which
are all public.

Additionally, Routers have a `.route(path)` method which returns a new
instance of Route for the requested path. Route(s) are isolated
middleware stacks and contain methods for the HTTP verbs as well as an
`.all` method to act similar to middleware. These methods are chainable
to easily describe requirements for a route.

  var route = Router.route('/foo'); // or 'app.route('/foo')'

  route
  .all(auth)
  .get(function(...) {})
  .all(more_checks)
  .post(function(...) {})

Any Route and Router methods which accept handlers also accept error
(arity 4) handlers which will also behave as expected.

Finally, the `app.router` getter has been removed. Middleware and
handlers are run IN THE ORDER they are seen in the file. This means that
code which injected the `app.router` and then added error handlers (or
other middleware) will need to be updated to move those handlers after
any requests added on the app object. The examples have been updated
accordingly. This is the largest breaking change to codebases in this
commit.
2014-02-03 15:59:52 -05:00
Roman Shtylman
4bf9cfd477 update merge-descriptors 2014-01-29 20:01:10 -05:00
Roman Shtylman
08cbc442f5 update cookie-signature to 1.0.3
Fix for timing attack
2014-01-29 20:00:23 -05:00
Roman Shtylman
a02dd201e6 update send to 0.2.0 2014-01-29 19:58:53 -05:00
TJ Holowaychuk
a5f7dcee04 update node-fresh 2014-01-29 12:17:16 -08:00
Roman Shtylman
0ddd761904 update range parser to 1.0.0
- License

see #1912
2014-01-29 10:00:28 -05:00
Roman Shtylman
991c2a9d05 Merge pull request #1908 from visionmedia/locals-object
change res.locals to a plain js object.
2014-01-28 14:23:52 -08:00
Roman Shtylman
4983c38298 change res.locals to a plain js object.
Anyone who wants something fancier should use modules.

- fixes annoyance with not being able to set 'name' property on locals
2014-01-27 19:17:29 -05:00
Roman Shtylman
337ab24899 remove unused require 2014-01-24 19:31:32 -05:00
Roman Shtylman
63c6a9c5ad use escape-html module to escape html
Another util bites the dust.
2014-01-24 19:21:21 -05:00
Roman Shtylman
718e68ffae use utils-merge module to mixin object properties 2014-01-24 19:16:37 -05:00
Roman Shtylman
f56a5f01c4 remove deprecated express.createServer() method
This has been warning about deprecation for a long time. Use `express()`
to instantiate an express app.
2014-01-19 14:05:12 -05:00
Roman Shtylman
b77ffe0228 Merge pull request #1904 from popomore/master
delete semicolon
2014-01-19 09:18:29 -08:00
Haoliang Gao
fd6439bb36 delete semicolon 2014-01-19 23:53:48 +08:00
Jonathan Ong
121f8d02f3 Merge pull request #1889 from vesln/send-null-undefined
update the tests to show a difference between `send(null)` and `send(und...
2014-01-14 09:17:04 -08:00
Roman Shtylman
5ddbb6965f Merge pull request #1868 from dpatti/smarter-router-auto-options
Automatic OPTIONS response breaks with multiple routers
2014-01-13 14:45:06 -08:00
Doug Patti
a3b5f6d07f prevent incorrect automatic OPTIONS responses
The router has automatic handling of OPTIONS based on the registered
routes, but if you make an OPTIONS request for an endpoint that does
not exist, then it will still return a 200 with nothing allowed.
Instead, we can let the request move on down the middleware chain. This
has two benefits: first, if the route was not defined and no other
middleware handles it, it will return with a 404. Secondly, if multiple
routers are used and a later one has the route or a custom OPTIONS
defined, the first router will not respond incorrectly.
2014-01-13 17:40:42 -05:00
Roman Shtylman
ac2cbef8be Merge pull request #1899 from visionmedia/remove-configure
Remove app.configure
2014-01-11 15:42:55 -08:00
Roman Shtylman
dff22e9d09 update history file with configure changes 2014-01-11 10:54:13 -05:00
Roman Shtylman
7282b50ad0 remove app.configure() 2014-01-11 10:53:54 -05:00
Roman Shtylman
8c059469fd No 'json spaces' by default
Json rendering can be handled by user tools or overridden in their own
app to behave as desired. Minimizes the use of magic env settings.
2014-01-11 10:53:36 -05:00
Roman Shtylman
8c3f153dd4 remove use of app.configure for view cache setting 2014-01-11 10:52:38 -05:00
Jonathan Ong
185b526e60 Merge pull request #1892 from matheusazzi/patch-1
Update to valid Jade Doctype
2014-01-04 19:23:44 -08:00
Matheus Azzi
38996b30b1 Update layout.jade 2014-01-05 01:14:38 -02:00
TJ Holowaychuk
827dfed7c2 Merge pull request #1890 from oliversalzburg/patch-1
Value parameter of app.set() should be typed optional Object
2014-01-04 18:12:52 -08:00
Oliver Salzburg
28af21baeb Value parameter of app.set() is now typed optional mixed 2014-01-04 22:05:19 +01:00
Oliver Salzburg
951c70496b Value parameter of app.set() should be typed optional Object 2014-01-04 17:50:27 +01:00
Veselin Todorov
a36eeb96f3 update the tests to show a difference between send(null) and send(undefiend) 2014-01-03 19:47:57 +02:00
Jonathan Ong
7018d3d0e6 history: req.params 2014-01-03 03:00:48 -08:00
Jonathan Ong
3f14b4de1f Merge pull request #1835 from visionmedia/change-req-params-to-object
change req.params to an object instead of an array
2014-01-03 03:00:13 -08:00
Jonathan Ong
26c0be4c4e improve history.md 2014-01-03 02:57:24 -08:00
Jonathan Ong
cec0c06a70 refactor req.is and req.accepts* 2014-01-03 02:50:09 -08:00
Jonathan Ong
476f8deb07 remove binary 2014-01-03 02:33:00 -08:00
TJ Holowaychuk
c6c71abf4d change req.params to an object instead of an array 2013-11-27 19:46:39 -08:00
255 changed files with 17278 additions and 5042 deletions

11
.editorconfig Normal file
View File

@@ -0,0 +1,11 @@
# http://editorconfig.org
root = true
[*]
charset = utf-8
insert_final_newline = true
trim_trailing_whitespace = true
[{*.js,*.json,*.yml}]
indent_size = 2
indent_style = space

2
.eslintignore Normal file
View File

@@ -0,0 +1,2 @@
coverage
node_modules

8
.eslintrc.yml Normal file
View File

@@ -0,0 +1,8 @@
root: true
rules:
eol-last: error
eqeqeq: [error, allow-null]
indent: [error, 2, { MemberExpression: "off", SwitchCase: 1 }]
no-trailing-spaces: error
no-unused-vars: [error, { vars: all, args: none, ignoreRestSiblings: true }]

218
.github/workflows/ci.yml vendored Normal file
View File

@@ -0,0 +1,218 @@
name: ci
on:
- pull_request
- push
jobs:
test:
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
name:
- Node.js 0.10
- Node.js 0.12
- io.js 1.x
- io.js 2.x
- io.js 3.x
- Node.js 4.x
- Node.js 5.x
- Node.js 6.x
- Node.js 7.x
- Node.js 8.x
- Node.js 9.x
- Node.js 10.x
- Node.js 11.x
- Node.js 12.x
- Node.js 13.x
- Node.js 14.x
- Node.js 15.x
- Node.js 16.x
- Node.js 17.x
- Node.js 18.x
- Node.js 19.x
- Node.js 20.x
- Node.js 21.x
include:
- name: Node.js 0.10
node-version: "0.10"
npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0
- name: Node.js 0.12
node-version: "0.12"
npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0
- name: io.js 1.x
node-version: "1.8"
npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0
- name: io.js 2.x
node-version: "2.5"
npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0
- name: io.js 3.x
node-version: "3.3"
npm-i: mocha@3.5.3 nyc@10.3.2 supertest@2.0.0
- name: Node.js 4.x
node-version: "4.9"
npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2
- name: Node.js 5.x
node-version: "5.12"
npm-i: mocha@5.2.0 nyc@11.9.0 supertest@3.4.2
- name: Node.js 6.x
node-version: "6.17"
npm-i: mocha@6.2.2 nyc@14.1.1 supertest@3.4.2
- name: Node.js 7.x
node-version: "7.10"
npm-i: mocha@6.2.2 nyc@14.1.1 supertest@6.1.6
- name: Node.js 8.x
node-version: "8.17"
npm-i: mocha@7.2.0 nyc@14.1.1
- name: Node.js 9.x
node-version: "9.11"
npm-i: mocha@7.2.0 nyc@14.1.1
- name: Node.js 10.x
node-version: "10.24"
npm-i: mocha@8.4.0
- name: Node.js 11.x
node-version: "11.15"
npm-i: mocha@8.4.0
- name: Node.js 12.x
node-version: "12.22"
npm-i: mocha@9.2.2
- name: Node.js 13.x
node-version: "13.14"
npm-i: mocha@9.2.2
- name: Node.js 14.x
node-version: "14.20"
- name: Node.js 15.x
node-version: "15.14"
- name: Node.js 16.x
node-version: "16.20"
- name: Node.js 17.x
node-version: "17.9"
- name: Node.js 18.x
node-version: "18.19"
- name: Node.js 19.x
node-version: "19.9"
- name: Node.js 20.x
node-version: "20.11"
- name: Node.js 21.x
node-version: "21.6"
steps:
- uses: actions/checkout@v4
- name: Install Node.js ${{ matrix.node-version }}
shell: bash -eo pipefail -l {0}
run: |
nvm install --default ${{ matrix.node-version }}
dirname "$(nvm which ${{ matrix.node-version }})" >> "$GITHUB_PATH"
- name: Configure npm
run: |
npm config set loglevel error
if [[ "$(npm config get package-lock)" == "true" ]]; then
npm config set package-lock false
else
npm config set shrinkwrap false
fi
- name: Install npm module(s) ${{ matrix.npm-i }}
run: npm install --save-dev ${{ matrix.npm-i }}
if: matrix.npm-i != ''
- name: Remove non-test dependencies
run: npm rm --silent --save-dev connect-redis
- name: Setup Node.js version-specific dependencies
shell: bash
run: |
# eslint for linting
# - remove on Node.js < 12
if [[ "$(cut -d. -f1 <<< "${{ matrix.node-version }}")" -lt 12 ]]; then
node -pe 'Object.keys(require("./package").devDependencies).join("\n")' | \
grep -E '^eslint(-|$)' | \
sort -r | \
xargs -n1 npm rm --silent --save-dev
fi
- name: Install Node.js dependencies
run: npm install
- name: List environment
id: list_env
shell: bash
run: |
echo "node@$(node -v)"
echo "npm@$(npm -v)"
npm -s ls ||:
(npm -s ls --depth=0 ||:) | awk -F'[ @]' 'NR>1 && $2 { print $2 "=" $3 }' >> "$GITHUB_OUTPUT"
- name: Run tests
shell: bash
run: |
npm run test-ci
cp coverage/lcov.info "coverage/${{ matrix.name }}.lcov"
- name: Lint code
if: steps.list_env.outputs.eslint != ''
run: npm run lint
- name: Collect code coverage
run: |
mv ./coverage "./${{ matrix.name }}"
mkdir ./coverage
mv "./${{ matrix.name }}" "./coverage/${{ matrix.name }}"
- name: Upload code coverage
uses: actions/upload-artifact@v3
with:
name: coverage
path: ./coverage
retention-days: 1
coverage:
needs: test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install lcov
shell: bash
run: sudo apt-get -y install lcov
- name: Collect coverage reports
uses: actions/download-artifact@v3
with:
name: coverage
path: ./coverage
- name: Merge coverage reports
shell: bash
run: find ./coverage -name lcov.info -exec printf '-a %q\n' {} \; | xargs lcov -o ./coverage/lcov.info
- name: Upload coverage report
uses: coverallsapp/github-action@master
with:
github-token: ${{ secrets.GITHUB_TOKEN }}

21
.gitignore vendored
View File

@@ -1,26 +1,15 @@
# OS X
.DS_Store*
Icon?
._*
# Windows
Thumbs.db
ehthumbs.db
Desktop.ini
# Linux
.directory
*~
# npm
node_modules
package-lock.json
*.log
*.gz
# Coveralls
.nyc_output
coverage
# Benchmarking
benchmarks/graphs
# ignore additional files using core.excludesFile
# https://git-scm.com/docs/gitignore

View File

@@ -1,9 +0,0 @@
language: node_js
node_js:
- "0.8"
- "0.10"
- "0.12"
sudo: false
before_install: "npm rm --save-dev connect-redis"
script: "npm run-script test-travis"
after_script: "npm install coveralls@2.10.0 && cat ./coverage/lcov.info | coveralls"

92
Charter.md Normal file
View File

@@ -0,0 +1,92 @@
# Express Charter
## Section 0: Guiding Principles
The Express project is part of the OpenJS Foundation which operates
transparently, openly, collaboratively, and ethically.
Project proposals, timelines, and status must not merely be open, but
also easily visible to outsiders.
## Section 1: Scope
Express is a HTTP web server framework with a simple and expressive API
which is highly aligned with Node.js core. We aim to be the best in
class for writing performant, spec compliant, and powerful web servers
in Node.js. As one of the oldest and most popular web frameworks in
the ecosystem, we have an important place for new users and experts
alike.
### 1.1: In-scope
Express is made of many modules spread between three GitHub Orgs:
- [expressjs](http://github.com/expressjs/): Top level middleware and
libraries
- [pillarjs](http://github.com/pillarjs/): Components which make up
Express but can also be used for other web frameworks
- [jshttp](http://github.com/jshttp/): Low level HTTP libraries
### 1.2: Out-of-Scope
Section Intentionally Left Blank
## Section 2: Relationship with OpenJS Foundation CPC.
Technical leadership for the projects within the OpenJS Foundation is
delegated to the projects through their project charters by the OpenJS
Cross Project Council (CPC). In the case of the Express project, it is
delegated to the Express Technical Committee ("TC").
This Technical Committee is in charge of both the day-to-day operations
of the project, as well as its technical management. This charter can
be amended by the TC requiring at least two approvals and a minimum two
week comment period for other TC members or CPC members to object. Any
changes the CPC wishes to propose will be considered a priority but
will follow the same process.
### 2.1 Other Formal Project Relationships
Section Intentionally Left Blank
## Section 3: Express Governing Body
The Express project is managed by the Technical Committee ("TC").
Members can be added to the TC at any time. Any committer can nominate
another committer to the TC and the TC uses its standard consensus
seeking process to evaluate whether or not to add this new member.
Members who do not participate consistently at the level of a majority
of the other members are expected to resign.
## Section 4: Roles & Responsibilities
The Express TC manages all aspects of both the technical and community
parts of the project. Members of the TC should attend the regular
meetings when possible, and be available for discussion of time
sensitive or important issues.
### Section 4.1 Project Operations & Management
Section Intentionally Left Blank
### Section 4.2: Decision-making, Voting, and/or Elections
The Express TC uses a "consensus seeking" process for issues that are
escalated to the TC. The group tries to find a resolution that has no
open objections among TC members. If a consensus cannot be reached
that has no objections then a majority wins vote is called. It is also
expected that the majority of decisions made by the TC are via a
consensus seeking process and that voting is only used as a last-resort.
Resolution may involve returning the issue to committers with
suggestions on how to move forward towards a consensus. It is not
expected that a meeting of the TC will resolve all issues on its
agenda during that meeting and may prefer to continue the discussion
happening among the committers.
### Section 4.3: Other Project Roles
Section Intentionally Left Blank
## Section 5: Definitions
Section Intentionally Left Blank

139
Code-Of-Conduct.md Normal file
View File

@@ -0,0 +1,139 @@
# Contributor Covenant Code of Conduct
As a member of the Open JS Foundation, Express has adopted the
[Contributor Covenant 2.0][cc-20-doc].
If an issue arises and you cannot resolve it directly with the parties
involved, you can report it to the Express project TC through the following
email: express-coc@lists.openjsf.org
In addition, the OpenJS Foundation maintains a Code of Conduct Panel (CoCP).
This is a foundation-wide team established to manage escalation when a reporter
believes that a report to a member project or the CPC has not been properly
handled. In order to escalate to the CoCP send an email to
coc-escalation@lists.openjsf.org.
## Our Pledge
We as members, contributors, and leaders pledge to make participation in our
community a harassment-free experience for everyone, regardless of age, body
size, visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity and
orientation.
We pledge to act and interact in ways that contribute to an open, welcoming,
diverse, inclusive, and healthy community.
## Our Standards
Examples of behavior that contributes to a positive environment for our
community include:
* Demonstrating empathy and kindness toward other people
* Being respectful of differing opinions, viewpoints, and experiences
* Giving and gracefully accepting constructive feedback
* Accepting responsibility and apologizing to those affected by our mistakes,
and learning from the experience
* Focusing on what is best not just for us as individuals, but for the overall
community
Examples of unacceptable behavior include:
* The use of sexualized language or imagery, and sexual attention or advances
of any kind
* Trolling, insulting or derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or email address,
without their explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Enforcement Responsibilities
Community leaders are responsible for clarifying and enforcing our standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior that they deem inappropriate, threatening, offensive,
or harmful.
Community leaders have the right and responsibility to remove, edit, or reject
comments, commits, code, wiki edits, issues, and other contributions that are
not aligned to this Code of Conduct, and will communicate reasons for
moderation decisions when appropriate.
## Scope
This Code of Conduct applies within all community spaces, and also applies when
an individual is officially representing the community in public spaces.
Examples of representing our community include using an official e-mail
address, posting via an official social media account, or acting as an
appointed representative at an online or offline event.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported to the community leaders responsible for enforcement at
express-coc@lists.openjsf.org. All complaints will be reviewed and
investigated promptly and fairly.
All community leaders are obligated to respect the privacy and security of the
reporter of any incident.
## Enforcement Guidelines
Community leaders will follow these Community Impact Guidelines in determining
the consequences for any action they deem in violation of this Code of Conduct:
### 1. Correction
**Community Impact**: Use of inappropriate language or other behavior deemed
unprofessional or unwelcome in the community.
**Consequence**: A private, written warning from community leaders, providing
clarity around the nature of the violation and an explanation of why the
behavior was inappropriate. A public apology may be requested.
### 2. Warning
**Community Impact**: A violation through a single incident or series of
actions.
**Consequence**: A warning with consequences for continued behavior. No
interaction with the people involved, including unsolicited interaction with
those enforcing the Code of Conduct, for a specified period of time. This
includes avoiding interactions in community spaces as well as external channels
like social media. Violating these terms may lead to a temporary or permanent
ban.
### 3. Temporary Ban
**Community Impact**: A serious violation of community standards, including
sustained inappropriate behavior.
**Consequence**: A temporary ban from any sort of interaction or public
communication with the community for a specified period of time. No public or
private interaction with the people involved, including unsolicited
interaction with those enforcing the Code of Conduct, is allowed during this
period. Violating these terms may lead to a permanent ban.
### 4. Permanent Ban
**Community Impact**: Demonstrating a pattern of violation of community
standards, including sustained inappropriate behavior, harassment of an
individual, or aggression toward or disparagement of classes of individuals.
**Consequence**: A permanent ban from any sort of public interaction within the
project community.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant, version 2.0](cc-20-doc).
Community Impact Guidelines were inspired by
[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
[cc-20-doc]: https://www.contributor-covenant.org/version/2/0/code_of_conduct/
For answers to common questions about this code of conduct, see the FAQ at
https://www.contributor-covenant.org/faq. Translations are available at
https://www.contributor-covenant.org/translations.

51
Collaborator-Guide.md Normal file
View File

@@ -0,0 +1,51 @@
# Express Collaborator Guide
## Website Issues
Open issues for the expressjs.com website in https://github.com/expressjs/expressjs.com.
## PRs and Code contributions
* Tests must pass.
* Follow the [JavaScript Standard Style](http://standardjs.com/) and `npm run lint`.
* If you fix a bug, add a test.
## Branches
Use the `master` branch for bug fixes or minor work that is intended for the
current release stream.
Use the correspondingly named branch, e.g. `5.0`, for anything intended for
a future release of Express.
## Steps for contributing
1. [Create an issue](https://github.com/expressjs/express/issues/new) for the
bug you want to fix or the feature that you want to add.
2. Create your own [fork](https://github.com/expressjs/express) on GitHub, then
checkout your fork.
3. Write your code in your local copy. It's good practice to create a branch for
each new issue you work on, although not compulsory.
4. To run the test suite, first install the dependencies by running `npm install`,
then run `npm test`.
5. Ensure your code is linted by running `npm run lint` -- fix any issue you
see listed.
6. If the tests pass, you can commit your changes to your fork and then create
a pull request from there. Make sure to reference your issue from the pull
request comments by including the issue number e.g. `#123`.
## Issues which are questions
We will typically close any vague issues or questions that are specific to some
app you are writing. Please double check the docs and other references before
being trigger happy with posting a question issue.
Things that will help get your question issue looked at:
* Full and runnable JS code.
* Clear description of the problem or unexpected behavior.
* Clear description of the expected result.
* Steps you have taken to debug it yourself.
If you post a question and do not outline the above items or make it easy for
us to understand and reproduce your issue, it will be closed.

176
Contributing.md Normal file
View File

@@ -0,0 +1,176 @@
# Express.js Community Contributing Guide 1.0
The goal of this document is to create a contribution process that:
* Encourages new contributions.
* Encourages contributors to remain involved.
* Avoids unnecessary processes and bureaucracy whenever possible.
* Creates a transparent decision making process that makes it clear how
contributors can be involved in decision making.
## Vocabulary
* A **Contributor** is any individual creating or commenting on an issue or pull request.
* A **Committer** is a subset of contributors who have been given write access to the repository.
* A **Project Captain** is the lead maintainer of a repository.
* A **TC (Technical Committee)** is a group of committers representing the required technical
expertise to resolve rare disputes.
* A **Triager** is a subset of contributors who have been given triage access to the repository.
## Logging Issues
Log an issue for any question or problem you might have. When in doubt, log an issue, and
any additional policies about what to include will be provided in the responses. The only
exception is security disclosures which should be sent privately.
Committers may direct you to another repository, ask for additional clarifications, and
add appropriate metadata before the issue is addressed.
Please be courteous and respectful. Every participant is expected to follow the
project's Code of Conduct.
## Contributions
Any change to resources in this repository must be through pull requests. This applies to all changes
to documentation, code, binary files, etc. Even long term committers and TC members must use
pull requests.
No pull request can be merged without being reviewed.
For non-trivial contributions, pull requests should sit for at least 36 hours to ensure that
contributors in other timezones have time to review. Consideration should also be given to
weekends and other holiday periods to ensure active committers all have reasonable time to
become involved in the discussion and review process if they wish.
The default for each contribution is that it is accepted once no committer has an objection.
During a review, committers may also request that a specific contributor who is most versed in a
particular area gives a "LGTM" before the PR can be merged. There is no additional "sign off"
process for contributions to land. Once all issues brought by committers are addressed it can
be landed by any committer.
In the case of an objection being raised in a pull request by another committer, all involved
committers should seek to arrive at a consensus by way of addressing concerns being expressed
by discussion, compromise on the proposed change, or withdrawal of the proposed change.
If a contribution is controversial and committers cannot agree about how to get it to land
or if it should land then it should be escalated to the TC. TC members should regularly
discuss pending contributions in order to find a resolution. It is expected that only a
small minority of issues be brought to the TC for resolution and that discussion and
compromise among committers be the default resolution mechanism.
## Becoming a Triager
Anyone can become a triager! Read more about the process of being a triager in
[the triage process document](Triager-Guide.md).
[Open an issue in `expressjs/express` repo](https://github.com/expressjs/express/issues/new)
to request the triage role. State that you have read and agree to the
[Code of Conduct](Code-Of-Conduct.md) and details of the role.
Here is an example issue content you can copy and paste:
```
Title: Request triager role for <your GitHub username>
I have read and understood the project's Code of Conduct.
I also have read and understood the process and best practices around Express triaging.
I request for a triager role for the following GitHub organizations:
jshttp
pillarjs
express
```
Once you have opened your issue, a member of the TC will add you to the `triage` team in
the organizations requested. They will then close the issue.
Happy triaging!
## Becoming a Committer
All contributors who land a non-trivial contribution should be on-boarded in a timely manner,
and added as a committer, and be given write access to the repository.
Committers are expected to follow this policy and continue to send pull requests, go through
proper review, and have other committers merge their pull requests.
## TC Process
The TC uses a "consensus seeking" process for issues that are escalated to the TC.
The group tries to find a resolution that has no open objections among TC members.
If a consensus cannot be reached that has no objections then a majority wins vote
is called. It is also expected that the majority of decisions made by the TC are via
a consensus seeking process and that voting is only used as a last-resort.
Resolution may involve returning the issue to project captains with suggestions on
how to move forward towards a consensus. It is not expected that a meeting of the TC
will resolve all issues on its agenda during that meeting and may prefer to continue
the discussion happening among the project captains.
Members can be added to the TC at any time. Any TC member can nominate another committer
to the TC and the TC uses its standard consensus seeking process to evaluate whether or
not to add this new member. The TC will consist of a minimum of 3 active members and a
maximum of 10. If the TC should drop below 5 members the active TC members should nominate
someone new. If a TC member is stepping down, they are encouraged (but not required) to
nominate someone to take their place.
TC members will be added as admin's on the Github orgs, npm orgs, and other resources as
necessary to be effective in the role.
To remain "active" a TC member should have participation within the last 12 months and miss
no more than six consecutive TC meetings. Our goal is to increase participation, not punish
people for any lack of participation, this guideline should be only be used as such
(replace an inactive member with a new active one, for example). Members who do not meet this
are expected to step down. If A TC member does not step down, an issue can be opened in the
discussions repo to move them to inactive status. TC members who step down or are removed due
to inactivity will be moved into inactive status.
Inactive status members can become active members by self nomination if the TC is not already
larger than the maximum of 10. They will also be given preference if, while at max size, an
active member steps down.
## Project Captains
The Express TC can designate captains for individual projects/repos in the
organizations. These captains are responsible for being the primary
day-to-day maintainers of the repo on a technical and community front.
Repo captains are empowered with repo ownership and package publication rights.
When there are conflicts, especially on topics that effect the Express project
at large, captains are responsible to raise it up to the TC and drive
those conflicts to resolution. Captains are also responsible for making sure
community members follow the community guidelines, maintaining the repo
and the published package, as well as in providing user support.
Like TC members, Repo captains are a subset of committers.
To become a captain for a project the candidate is expected to participate in that
project for at least 6 months as a committer prior to the request. They should have
helped with code contributions as well as triaging issues. They are also required to
have 2FA enabled on both their GitHub and npm accounts. Any TC member or existing
captain on the repo can nominate another committer to the captain role, submit a PR to
this doc, under `Current Project Captains` section (maintaining the sort order) with
the project, their GitHub handle and npm username (if different). The PR will require
at least 2 approvals from TC members and 2 weeks hold time to allow for comment and/or
dissent. When the PR is merged, a TC member will add them to the proper GitHub/npm groups.
### Current Project Captains
- `expressjs/express`: @wesleytodd
- `expressjs/discussions`: @wesleytodd
- `expressjs/expressjs.com`: @crandmck
- `expressjs/body-parser`: @wesleytodd
- `expressjs/multer`: @LinusU
- `expressjs/cookie-parser`: @wesleytodd
- `expressjs/generator`: @wesleytodd
- `expressjs/statusboard`: @wesleytodd
- `pillarjs/path-to-regexp`: @blakeembrey
- `pillarjs/router`: @dougwilson, @wesleytodd
- `pillarjs/finalhandler`: @wesleytodd
- `pillarjs/request`: @wesleytodd
- `jshttp/http-errors`: @wesleytodd
- `jshttp/cookie`: @wesleytodd
- `jshttp/on-finished`: @wesleytodd
- `jshttp/forwarded`: @wesleytodd
- `jshttp/proxy-addr`: @wesleytodd

1576
History.md

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
(The MIT License)
Copyright (c) 2009-2013 TJ Holowaychuk <tj@vision-media.ca>
Copyright (c) 2013 Roman Shtylman <shtylman+expressjs@gmail.com>
Copyright (c) 2009-2014 TJ Holowaychuk <tj@vision-media.ca>
Copyright (c) 2013-2014 Roman Shtylman <shtylman+expressjs@gmail.com>
Copyright (c) 2014-2015 Douglas Christopher Wilson <doug@somethingdoug.com>
Permission is hereby granted, free of charge, to any person obtaining
@@ -21,4 +21,4 @@ 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.
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

125
Readme-Guide.md Normal file
View File

@@ -0,0 +1,125 @@
# README guidelines
Every module in the expressjs, pillarjs, and jshttp organizations should have
a README file named `README.md`. The purpose of the README is to:
- Explain the purpose of the module and how to use it.
- Act as a landing page (both on GitHub and npmjs.com) for the module to help
people find it via search. Middleware module READMEs are also incorporated
into https://expressjs.com/en/resources/middleware.html.
- Encourage community contributions and participation.
Use the [README template](https://github.com/expressjs/express/wiki/README-template)
to quickly create a new README file.
## Top-level items
**Badges** (optional): At the very top (with no subheading), include any
applicable badges, such as npm version/downloads, build status, test coverage,
and so on. Badges should resolve properly (not display a broken image).
Possible badges include:
- npm version: `[![NPM Version][npm-image]][npm-url]`
- npm downloads: `[![NPM Downloads][downloads-image]][downloads-url]`
- Build status: `[![Build Status][travis-image]][travis-url]`
- Test coverage: `[![Test Coverage][coveralls-image]][coveralls-url]`
- Tips: `[![Gratipay][gratipay-image]][gratipay-url]`
**Summary**: Following badges, provide a one- or two-sentence description of
what the module does. This should be the same as the npmjs.org blurb (which
comes from the description property of `package.json`). Since npm doesn't
handle markdown for the blurb, avoid using markdown in the summary sentence.
**TOC** (Optional): For longer READMEs, provide a table of contents that has
a relative link to each section. A tool such as
[doctoc](https://www.npmjs.com/package/doctoc) makes it very easy to generate
a TOC.
## Overview
Optionally, include a section of one or two paragraphs with more high-level
information on what the module does, what problems it solves, why one would
use it and how. Don't just repeat what's in the summary.
## Installation
Required. This section is typically just:
```sh
$ npm install module-name
```
But include any other steps or requirements.
NOTE: Use the `sh` code block to make the shell command display properly on
the website.
## Basic use
- Provide a general description of how to use the module with code sample.
Include any important caveats or restrictions.
- Explain the most common use cases.
- Optional: a simple "hello world" type example (where applicable). This
example is in addition to the more comprehensive [example section](#examples)
later.
## API
Provide complete API documentation.
Formatting conventions: Each function is listed in a 3rd-level heading (`###`),
like this:
```
### Function_name(arg, options [, optional_arg] ... )
```
**Options objects**
For arguments that are objects (for example, options object), describe the
properties in a table, as follows. This matches the formatting used in the
[Express API docs](https://expressjs.com/en/4x/api.html).
|Property | Description | Type | Default|
|----------|-----------|------------|-------------|
|Name of the property in `monospace`. | Brief description | String, Number, Boolean, etc. | If applicable.|
If all the properties are required (i.e. there are no defaults), then you
can omit the default column.
Instead of very lengthy descriptions, link out to subsequent paragraphs for
more detailed explanation of specific cases (e.g. "When this property is set
to 'foobar', xyz happens; see &lt;link to following section &gt;.)
If there are options properties that are themselves options, use additional
tables. See [`trust proxy` and `etag` properties](https://expressjs.com/en/4x/api.html#app.settings.table).
## Examples
Every README should have at least one example; ideally more. For code samples,
be sure to use the `js` code block, for proper display in the website, e.g.:
```js
var csurf = require('csurf')
...
```
## Tests
What tests are included.
How to run them.
The convention for running tests is `npm test`. All our projects should follow
this convention.
## Contributors
Names of module "owners" (lead developers) and other developers who have
contributed.
## License
Link to the license, with a short description of what it is, e.g. "MIT" or
whatever. Ideally, avoid putting the license text directly in the README; link
to it instead.

193
Readme.md
View File

@@ -1,131 +1,166 @@
[![express logo](http://f.cl.ly/items/0V2S1n0K1i3y1c122g04/Screen%20Shot%202012-04-11%20at%209.59.42%20AM.png)](http://expressjs.com/)
[![Express Logo](https://i.cloudup.com/zfY6lL7eFa-3000x3000.png)](http://expressjs.com/)
Fast, unopinionated, minimalist web framework for [node](http://nodejs.org).
Fast, unopinionated, minimalist web framework for [Node.js](http://nodejs.org).
[![NPM version](https://img.shields.io/npm/v/express.svg)](https://www.npmjs.org/package/express)
[![Build Status](https://img.shields.io/travis/strongloop/express/3.x.svg)](https://travis-ci.org/strongloop/express)
[![Coverage Status](https://img.shields.io/coveralls/strongloop/express/3.x.svg)](https://coveralls.io/r/strongloop/express)
[![Gratipay](https://img.shields.io/gratipay/dougwilson.svg)](https://gratipay.com/dougwilson/)
[![NPM Version][npm-version-image]][npm-url]
[![NPM Install Size][npm-install-size-image]][npm-install-size-url]
[![NPM Downloads][npm-downloads-image]][npm-downloads-url]
```js
var express = require('express');
var app = express();
const express = require('express')
const app = express()
app.get('/', function(req, res){
res.send('Hello World');
});
app.get('/', function (req, res) {
res.send('Hello World')
})
app.listen(3000);
app.listen(3000)
```
## Installation
$ npm install -g express
This is a [Node.js](https://nodejs.org/en/) module available through the
[npm registry](https://www.npmjs.com/).
## Quick Start
Before installing, [download and install Node.js](https://nodejs.org/en/download/).
Node.js 0.10 or higher is required.
The quickest way to get started with express is to utilize the executable `express(1)` to generate an application as shown below:
If this is a brand new project, make sure to create a `package.json` first with
the [`npm init` command](https://docs.npmjs.com/creating-a-package-json-file).
Create the app:
Installation is done using the
[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally):
$ npm install -g express
$ express /tmp/foo && cd /tmp/foo
```console
$ npm install express
```
Install dependencies:
$ npm install
Start the server:
$ node app
Follow [our installing guide](http://expressjs.com/en/starter/installing.html)
for more information.
## Features
* Built on [Connect](http://github.com/senchalabs/connect)
* Robust routing
* Focus on high performance
* Super-high test coverage
* HTTP helpers (redirection, caching, etc)
* View system supporting 14+ template engines
* Content negotiation
* Focus on high performance
* Environment based configuration
* Executable for generating applications quickly
* High test coverage
## Docs & Community
* [Website and Documentation](http://expressjs.com/) - [[website repo](https://github.com/expressjs/expressjs.com)]
* [#express](https://web.libera.chat/#express) on [Libera Chat](https://libera.chat) IRC
* [GitHub Organization](https://github.com/expressjs) for Official Middleware & Modules
* Visit the [Wiki](https://github.com/expressjs/express/wiki)
* [Google Group](https://groups.google.com/group/express-js) for discussion
* [Gitter](https://gitter.im/expressjs/express) for support and discussion
**PROTIP** Be sure to read [Migrating from 3.x to 4.x](https://github.com/expressjs/express/wiki/Migrating-from-3.x-to-4.x) as well as [New features in 4.x](https://github.com/expressjs/express/wiki/New-features-in-4.x).
## Quick Start
The quickest way to get started with express is to utilize the executable [`express(1)`](https://github.com/expressjs/generator) to generate an application as shown below:
Install the executable. The executable's major version will match Express's:
```console
$ npm install -g express-generator@4
```
Create the app:
```console
$ express /tmp/foo && cd /tmp/foo
```
Install dependencies:
```console
$ npm install
```
Start the server:
```console
$ npm start
```
View the website at: http://localhost:3000
## Philosophy
The Express philosophy is to provide small, robust tooling for HTTP servers, making
it a great solution for single page applications, web sites, hybrids, or public
it a great solution for single page applications, websites, hybrids, or public
HTTP APIs.
Built on Connect, you can use _only_ what you need, and nothing more. Applications
can be as big or as small as you like, even a single file. Express does
not force you to use any specific ORM or template engine. With support for over
14 template engines via [Consolidate.js](http://github.com/visionmedia/consolidate.js),
Express does not force you to use any specific ORM or template engine. With support for over
14 template engines via [Consolidate.js](https://github.com/tj/consolidate.js),
you can quickly craft your perfect framework.
## More Information
## Examples
* [Website and Documentation](http://expressjs.com/) stored at [strongloop/expressjs.com](https://github.com/strongloop/expressjs.com)
* Join #express on freenode
* [Google Group](http://groups.google.com/group/express-js) for discussion
* Follow [tjholowaychuk](http://twitter.com/tjholowaychuk) on twitter for updates
* Visit the [Wiki](http://github.com/strongloop/express/wiki)
* [Русскоязычная документация](http://jsman.ru/express/)
* Run express examples [online](https://runnable.com/express)
To view the examples, clone the Express repo and install the dependencies:
## Viewing Examples
```console
$ git clone https://github.com/expressjs/express.git --depth 1
$ cd express
$ npm install
```
Clone the Express repo, then install the dev dependencies to install all the example / test suite dependencies:
Then run whichever example you want:
$ git clone git://github.com/strongloop/express.git --depth 1
$ cd express
$ npm install
```console
$ node examples/content-negotiation
```
Then run whichever tests you want:
## Contributing
$ node examples/content-negotiation
[![Linux Build][github-actions-ci-image]][github-actions-ci-url]
[![Windows Build][appveyor-image]][appveyor-url]
[![Test Coverage][coveralls-image]][coveralls-url]
You can also view live examples here:
The Express.js project welcomes all constructive contributions. Contributions take many forms,
from code for bug fixes and enhancements, to additions and fixes to documentation, additional
tests, triaging incoming pull requests and issues, and more!
<a href="https://runnable.com/express" target="_blank"><img src="https://runnable.com/external/styles/assets/runnablebtn.png" style="width:67px;height:25px;"></a>
See the [Contributing Guide](Contributing.md) for more technical details on contributing.
## Running Tests
### Security Issues
To run the test suite, first invoke the following command within the repo, installing the development dependencies:
If you discover a security vulnerability in Express, please see [Security Policies and Procedures](Security.md).
$ npm install
### Running Tests
Then run the tests:
To run the test suite, first install the dependencies, then run `npm test`:
```sh
```console
$ npm install
$ npm test
```
## Contributors
## People
https://github.com/strongloop/express/graphs/contributors
The original author of Express is [TJ Holowaychuk](https://github.com/tj)
The current lead maintainer is [Douglas Christopher Wilson](https://github.com/dougwilson)
[List of all contributors](https://github.com/expressjs/express/graphs/contributors)
## License
(The MIT License)
[MIT](LICENSE)
Copyright (c) 2009-2012 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
'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.
[appveyor-image]: https://badgen.net/appveyor/ci/dougwilson/express/master?label=windows
[appveyor-url]: https://ci.appveyor.com/project/dougwilson/express
[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/express/master
[coveralls-url]: https://coveralls.io/r/expressjs/express?branch=master
[github-actions-ci-image]: https://badgen.net/github/checks/expressjs/express/master?label=linux
[github-actions-ci-url]: https://github.com/expressjs/express/actions/workflows/ci.yml
[npm-downloads-image]: https://badgen.net/npm/dm/express
[npm-downloads-url]: https://npmcharts.com/compare/express?minimal=true
[npm-install-size-image]: https://badgen.net/packagephobia/install/express
[npm-install-size-url]: https://packagephobia.com/result?p=express
[npm-url]: https://npmjs.org/package/express
[npm-version-image]: https://badgen.net/npm/v/express

192
Release-Process.md Normal file
View File

@@ -0,0 +1,192 @@
# Express Release Process
This document contains the technical aspects of the Express release process. The
intended audience is those who have been authorized by the Express Technical
Committee (TC) to create, promote and sign official release builds for Express,
as npm packages hosted on https://npmjs.com/package/express.
## Who can make releases?
Release authorization is given by the Express TC. Once authorized, an individual
must have the following access permissions:
### 1. Github release access
The individual making the release will need to be a member of the
expressjs/express team with Write permission level so they are able to tag the
release commit and push changes to the expressjs/express repository
(see Steps 4 and 5).
### 2. npmjs.com release access
The individual making the release will need to be made an owner on the
`express` package on npmjs.com so they are able to publish the release
(see Step 6).
## How to publish a release
Before publishing, the following preconditions should be met:
- A release proposal issue or tracking pull request (see "Proposal branch"
below) will exist documenting:
- the proposed changes
- the type of release: patch, minor or major
- the version number (according to semantic versioning - http://semver.org)
- The proposed changes should be complete.
There are two main release flows: patch and non-patch.
The patch flow is for making **patch releases**. As per semantic versioning,
patch releases are for simple changes, eg: typo fixes, patch dependency updates,
and simple/low-risk bug fixes. Every other type of change is made via the
non-patch flow.
### Branch terminology
"Master branch"
- There is a branch in git used for the current major version of Express, named
`master`.
- This branch contains the completed commits for the next patch release of the
current major version.
- Releases for the current major version are published from this branch.
"Version branch"
- For any given major version of Express (current, previous or next) there is
a branch in git for that release named `<major-version>.x` (eg: `4.x`).
- This branch points to the commit of the latest tag for the given major version.
"Release branch"
- For any given major version of Express, there is a branch used for publishing
releases.
- For the current major version of Express, the release branch is the
"Master branch" named `master`.
- For all other major versions of Express, the release branch is the
"Version branch" named `<major-version>.x`.
"Proposal branch"
- A branch in git representing a proposed new release of Express. This can be a
minor or major release, named `<major-version>.0` for a major release,
`<major-version>.<minor-version>` for a minor release.
- A tracking pull request should exist to document the proposed release,
targeted at the appropriate release branch. Prior to opening the tracking
pull request the content of the release may have be discussed in an issue.
- This branch contains the commits accepted so far that implement the proposal
in the tracking pull request.
### Patch flow
In the patch flow, simple changes are committed to the release branch which
acts as an ever-present branch for the next patch release of the associated
major version of Express.
The release branch is usually kept in a state where it is ready to release.
Releases are made when sufficient time or change has been made to warrant it.
This is usually proposed and decided using a github issue.
### Non-patch flow
In the non-patch flow, changes are committed to a temporary proposal branch
created specifically for that release proposal. The branch is based on the
most recent release of the major version of Express that the release targets.
Releases are made when all the changes on a proposal branch are complete and
approved. This is done by merging the proposal branch into the release branch
(using a fast-forward merge), tagging it with the new version number and
publishing the release package to npmjs.com.
### Flow
Below is a detailed description of the steps to publish a release.
#### Step 1. Check the release is ready to publish
Check any relevant information to ensure the release is ready, eg: any
milestone, label, issue or tracking pull request for the release. The release
is ready when all proposed code, tests and documentation updates are complete
(either merged, closed or re-targeted to another release).
#### Step 2. (Non-patch flow only) Merge the proposal branch into the release branch
In the patch flow: skip this step.
In the non-patch flow:
```sh
$ git checkout <release-branch>
$ git merge --ff-only <proposal-branch>
```
<release-branch> - see "Release branch" of "Branches" above.
<proposal-branch> - see "Proposal branch" of "Non-patch flow" above.
**NOTE:** You may need to rebase the proposal branch to allow a fast-forward
merge. Using a fast-forward merge keeps the history clean as it does
not introduce merge commits.
### Step 3. Update the History.md and package.json to the new version number
The changes so far for the release should already be documented under the
"unreleased" section at the top of the History.md file, as per the usual
development practice. Change "unreleased" to the new release version / date.
Example diff fragment:
```diff
-unreleased
-==========
+4.13.3 / 2015-08-02
+===================
```
The version property in the package.json should already contain the version of
the previous release. Change it to the new release version.
Commit these changes together under a single commit with the message set to
the new release version (eg: `4.13.3`):
```sh
$ git checkout <release-branch>
<..edit files..>
$ git add History.md package.json
$ git commit -m '<version-number>'
```
### Step 4. Identify and tag the release commit with the new release version
Create a lightweight tag (rather than an annotated tag) named after the new
release version (eg: `4.13.3`).
```sh
$ git tag <version-number>
```
### Step 5. Push the release branch changes and tag to github
The branch and tag should be pushed directly to the main repository
(https://github.com/expressjs/express).
```sh
$ git push origin <release-branch>
$ git push origin <version-number>
```
### Step 6. Publish to npmjs.com
Ensure your local working copy is completely clean (no extra or changed files).
You can use `git status` for this purpose.
```sh
$ npm login <npm-username>
$ npm publish
```
**NOTE:** The version number to publish will be picked up automatically from
package.json.
### Step 7. Update documentation website
The documentation website https://expressjs.com/ documents the current release version in various places. For a new release:
1. Change the value of `current_version` in https://github.com/expressjs/expressjs.com/blob/gh-pages/_data/express.yml to match the latest version number.
2. Add a new section to the change log. For example, for a 4.x release, https://github.com/expressjs/expressjs.com/blob/gh-pages/en/changelog/4x.md,

46
Security.md Normal file
View File

@@ -0,0 +1,46 @@
# Security Policies and Procedures
This document outlines security procedures and general policies for the Express
project.
* [Reporting a Bug](#reporting-a-bug)
* [Disclosure Policy](#disclosure-policy)
* [Comments on this Policy](#comments-on-this-policy)
## Reporting a Bug
The Express team and community take all security bugs in Express seriously.
Thank you for improving the security of Express. We appreciate your efforts and
responsible disclosure and will make every effort to acknowledge your
contributions.
Report security bugs by emailing the lead maintainer in the Readme.md file.
To ensure the timely response to your report, please ensure that the entirety
of the report is contained within the email body and not solely behind a web
link or an attachment.
The lead maintainer will acknowledge your email within 48 hours, and will send a
more detailed response within 48 hours indicating the next steps in handling
your report. After the initial reply to your report, the security team will
endeavor to keep you informed of the progress towards a fix and full
announcement, and may ask for additional information or guidance.
Report security bugs in third-party modules to the person or team maintaining
the module.
## Disclosure Policy
When the security team receives a security bug report, they will assign it to a
primary handler. This person will coordinate the fix and release process,
involving the following steps:
* Confirm the problem and determine the affected versions.
* Audit code to find any potential similar problems.
* Prepare fixes for all releases still under maintenance. These fixes will be
released as fast as possible to npm.
## Comments on this Policy
If you have suggestions on how this process could be improved please submit a
pull request.

63
Triager-Guide.md Normal file
View File

@@ -0,0 +1,63 @@
# Express Triager Guide
## Issue Triage Process
When a new issue or pull request is opened the issue will be labeled with `needs triage`.
If a triage team member is available they can help make sure all the required information
is provided. Depending on the issue or PR there are several next labels they can add for further
classification:
* `needs triage`: This can be kept if the triager is unsure which next steps to take
* `awaiting more info`: If more info has been requested from the author, apply this label.
* `question`: User questions that do not appear to be bugs or enhancements.
* `discuss`: Topics for discussion. Might end in an `enhancement` or `question` label.
* `bug`: Issues that present a reasonable conviction there is a reproducible bug.
* `enhancement`: Issues that are found to be a reasonable candidate feature additions.
In all cases, issues may be closed by maintainers if they don't receive a timely response when
further information is sought, or when additional questions are asked.
## Approaches and Best Practices for getting into triage contributions
Review the organization's [StatusBoard](https://expressjs.github.io/statusboard/),
pay special attention to these columns: stars, watchers, open issues, and contributors.
This gives you a general idea about the criticality and health of the repository.
Pick a few projects based on that criteria, your interests, and skills (existing or aspiring).
Review the project's contribution guideline if present. In a nutshell,
commit to the community's standards and values. Review the
documentation, for most of the projects it is just the README.md, and
make sure you understand the key APIs, semantics, configurations, and use cases.
It might be helpful to write your own test apps to re-affirm your
understanding of the key functions. This may identify some gaps in
documentation, record those as they might be good PR's to open.
Skim through the issue backlog; identify low hanging issues and mostly new ones.
From those, attempt to recreate issues based on the OP description and
ask questions if required. No question is a bad question!
## Removal of Triage Role
There are a few cases where members can be removed as triagers:
- Breaking the CoC or project contributor guidelines
- Abuse or misuse of the role as deemed by the TC
- Lack of participation for more than 6 months
If any of these happen we will discuss as a part of the triage portion of the regular TC meetings.
If you have questions feel free to reach out to any of the TC members.
## Other Helpful Hints:
- Everyone is welcome to attend the [Express Technical Committee Meetings](https://github.com/expressjs/discussions#expressjs-tc-meetings), and as a triager, it might help to get a better idea of what's happening with the project.
- When exploring the module's functionality there are a few helpful steps:
- Turn on `DEBUG=*` (see https://www.npmjs.com/package/debug) to get detailed log information
- It is also a good idea to do live debugging to follow the control flow, try using `node --inspect`
- It is a good idea to make at least one pass of reading through the entire source
- When reviewing the list of open issues there are some common types and suggested actions:
- New/unattended issues or simple questions: A good place to start
- Hard bugs & ongoing discussions: always feel free to chime in and help
- Issues that imply gaps in the documentation: open PRs with changes or help the user to do so
- For recurring issues, it is helpful to create functional examples to demonstrate (publish as gists or a repo)
- Review and identify the maintainers. If necessary, at-mention one or more of them if you are unsure what to do
- Make sure all your interactions are professional, welcoming, and respectful to the parties involved.

112
appveyor.yml Normal file
View File

@@ -0,0 +1,112 @@
environment:
matrix:
- nodejs_version: "0.10"
- nodejs_version: "0.12"
- nodejs_version: "1.8"
- nodejs_version: "2.5"
- nodejs_version: "3.3"
- nodejs_version: "4.9"
- nodejs_version: "5.12"
- nodejs_version: "6.17"
- nodejs_version: "7.10"
- nodejs_version: "8.17"
- nodejs_version: "9.11"
- nodejs_version: "10.24"
- nodejs_version: "11.15"
- nodejs_version: "12.22"
- nodejs_version: "13.14"
- nodejs_version: "14.20"
- nodejs_version: "15.14"
- nodejs_version: "16.20"
- nodejs_version: "17.9"
- nodejs_version: "18.19"
- nodejs_version: "19.9"
- nodejs_version: "20.11"
- nodejs_version: "21.6"
cache:
- node_modules
install:
# Install Node.js
- ps: >-
try { Install-Product node $env:nodejs_version -ErrorAction Stop }
catch { Update-NodeJsInstallation (Get-NodeJsLatestBuild $env:nodejs_version) x64 }
# Configure npm
- ps: |
npm config set loglevel error
if ((npm config get package-lock) -eq "true") {
npm config set package-lock false
} else {
npm config set shrinkwrap false
}
# Remove all non-test dependencies
- ps: |
# Remove example dependencies
npm rm --silent --save-dev connect-redis
# Remove lint dependencies
cmd.exe /c "node -pe `"Object.keys(require('./package').devDependencies).join('\n')`"" | `
sls "^eslint(-|$)" | `
%{ npm rm --silent --save-dev $_ }
# Setup Node.js version-specific dependencies
- ps: |
# mocha for testing
# - use 3.x for Node.js < 4
# - use 5.x for Node.js < 6
# - use 6.x for Node.js < 8
# - use 7.x for Node.js < 10
# - use 8.x for Node.js < 12
# - use 9.x for Node.js < 14
if ([int]$env:nodejs_version.split(".")[0] -lt 4) {
npm install --silent --save-dev mocha@3.5.3
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 6) {
npm install --silent --save-dev mocha@5.2.0
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 8) {
npm install --silent --save-dev mocha@6.2.2
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 10) {
npm install --silent --save-dev mocha@7.2.0
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 12) {
npm install --silent --save-dev mocha@8.4.0
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 14) {
npm install --silent --save-dev mocha@9.2.2
}
- ps: |
# nyc for test coverage
# - use 10.3.2 for Node.js < 4
# - use 11.9.0 for Node.js < 6
# - use 14.1.1 for Node.js < 10
if ([int]$env:nodejs_version.split(".")[0] -lt 4) {
npm install --silent --save-dev nyc@10.3.2
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 6) {
npm install --silent --save-dev nyc@11.9.0
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 10) {
npm install --silent --save-dev nyc@14.1.1
}
- ps: |
# supertest for http calls
# - use 2.0.0 for Node.js < 4
# - use 3.4.2 for Node.js < 7
# - use 6.1.6 for Node.js < 8
if ([int]$env:nodejs_version.split(".")[0] -lt 4) {
npm install --silent --save-dev supertest@2.0.0
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 7) {
npm install --silent --save-dev supertest@3.4.2
} elseif ([int]$env:nodejs_version.split(".")[0] -lt 8) {
npm install --silent --save-dev supertest@6.1.6
}
# Update Node.js modules
- ps: |
# Prune & rebuild node_modules
if (Test-Path -Path node_modules) {
npm prune
npm rebuild
}
# Install Node.js modules
- npm install
build: off
test_script:
# Output version data
- ps: |
node --version
npm --version
# Run test script
- npm run test-ci
version: "{build}"

View File

@@ -1,13 +1,17 @@
all:
@./run 1 middleware
@./run 5 middleware
@./run 10 middleware
@./run 15 middleware
@./run 20 middleware
@./run 30 middleware
@./run 50 middleware
@./run 100 middleware
@./run 1 middleware 50
@./run 5 middleware 50
@./run 10 middleware 50
@./run 15 middleware 50
@./run 20 middleware 50
@./run 30 middleware 50
@./run 50 middleware 50
@./run 100 middleware 50
@./run 10 middleware 100
@./run 10 middleware 250
@./run 10 middleware 500
@./run 10 middleware 1000
@echo
.PHONY: all

34
benchmarks/README.md Normal file
View File

@@ -0,0 +1,34 @@
# Express Benchmarks
## Installation
You will need to install [wrk](https://github.com/wg/wrk/blob/master/INSTALL) in order to run the benchmarks.
## Running
To run the benchmarks, first install the dependencies `npm i`, then run `make`
The output will look something like this:
```
50 connections
1 middleware
7.15ms
6784.01
[...redacted...]
1000 connections
10 middleware
139.21ms
6155.19
```
### Tip: Include Node.js version in output
You can use `make && node -v` to include the node.js version in the output.
### Tip: Save the results to a file
You can use `make > results.log` to save the results to a file `results.log`.

View File

@@ -1,5 +1,4 @@
var http = require('http');
var express = require('..');
var app = express();
@@ -14,10 +13,8 @@ while (n--) {
});
}
var body = new Buffer('Hello World');
app.use(function(req, res, next){
res.send(body);
app.use(function(req, res){
res.send('Hello World')
});
app.listen(3333);

View File

@@ -4,13 +4,15 @@ echo
MW=$1 node $2 &
pid=$!
echo " $3 connections"
sleep 2
wrk 'http://localhost:3333/?foo[bar]=baz' \
-d 3 \
-c 50 \
-c $3 \
-t 8 \
| grep 'Requests/sec' \
| awk '{ print " " $2 }'
| grep 'Requests/sec\|Latency' \
| awk '{ print " " $2 }'
kill $pid

View File

@@ -1,440 +0,0 @@
#!/usr/bin/env node
/**
* Module dependencies.
*/
var program = require('commander')
, mkdirp = require('mkdirp')
, pkg = require('../package.json')
, readline = require('readline')
, version = pkg.version
, os = require('os')
, fs = require('fs');
// CLI
program
.version(version)
.usage('[options] [dir]')
.option('-s, --sessions', 'add session support')
.option('-e, --ejs', 'add ejs engine support (defaults to jade)')
.option('-J, --jshtml', 'add jshtml engine support (defaults to jade)')
.option('-H, --hogan', 'add hogan.js engine support')
.option('-c, --css <engine>', 'add stylesheet <engine> support (less|stylus) (defaults to plain css)')
.option('-f, --force', 'force on non-empty directory')
.parse(process.argv);
// Path
var path = program.args.shift() || '.';
// end-of-line code
var eol = os.EOL
// Template engine
program.template = 'jade';
if (program.ejs) program.template = 'ejs';
if (program.jshtml) program.template = 'jshtml';
if (program.hogan) program.template = 'hjs';
/**
* Routes index template.
*/
var index = [
''
, '/*'
, ' * GET home page.'
, ' */'
, ''
, 'exports.index = function(req, res){'
, ' res.render(\'index\', { title: \'Express\' });'
, '};'
].join(eol);
/**
* Routes users template.
*/
var users = [
''
, '/*'
, ' * GET users listing.'
, ' */'
, ''
, 'exports.list = function(req, res){'
, ' res.send("respond with a resource");'
, '};'
].join(eol);
/**
* Jade layout template.
*/
var jadeLayout = [
'doctype html'
, 'html'
, ' head'
, ' title= title'
, ' link(rel=\'stylesheet\', href=\'/stylesheets/style.css\')'
, ' body'
, ' block content'
].join(eol);
/**
* Jade index template.
*/
var jadeIndex = [
'extends layout'
, ''
, 'block content'
, ' h1= title'
, ' p Welcome to #{title}'
].join(eol);
/**
* EJS index template.
*/
var ejsIndex = [
'<!DOCTYPE html>'
, '<html>'
, ' <head>'
, ' <title><%= title %></title>'
, ' <link rel=\'stylesheet\' href=\'/stylesheets/style.css\' />'
, ' </head>'
, ' <body>'
, ' <h1><%= title %></h1>'
, ' <p>Welcome to <%= title %></p>'
, ' </body>'
, '</html>'
].join(eol);
/**
* JSHTML layout template.
*/
var jshtmlLayout = [
'<!DOCTYPE html>'
, '<html>'
, ' <head>'
, ' <title> @write(title) </title>'
, ' <link rel=\'stylesheet\' href=\'/stylesheets/style.css\' />'
, ' </head>'
, ' <body>'
, ' @write(body)'
, ' </body>'
, '</html>'
].join(eol);
/**
* JSHTML index template.
*/
var jshtmlIndex = [
'<h1>@write(title)</h1>'
, '<p>Welcome to @write(title)</p>'
].join(eol);
/**
* Hogan.js index template.
*/
var hoganIndex = [
'<!DOCTYPE html>'
, '<html>'
, ' <head>'
, ' <title>{{ title }}</title>'
, ' <link rel=\'stylesheet\' href=\'/stylesheets/style.css\' />'
, ' </head>'
, ' <body>'
, ' <h1>{{ title }}</h1>'
, ' <p>Welcome to {{ title }}</p>'
, ' </body>'
, '</html>'
].join(eol);
/**
* Default css template.
*/
var css = [
'body {'
, ' padding: 50px;'
, ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;'
, '}'
, ''
, 'a {'
, ' color: #00B7FF;'
, '}'
].join(eol);
/**
* Default less template.
*/
var less = [
'body {'
, ' padding: 50px;'
, ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;'
, '}'
, ''
, 'a {'
, ' color: #00B7FF;'
, '}'
].join(eol);
/**
* Default stylus template.
*/
var stylus = [
'body'
, ' padding: 50px'
, ' font: 14px "Lucida Grande", Helvetica, Arial, sans-serif'
, 'a'
, ' color: #00B7FF'
].join(eol);
/**
* App template.
*/
var app = [
''
, '/**'
, ' * Module dependencies.'
, ' */'
, ''
, 'var express = require(\'express\');'
, 'var routes = require(\'./routes\');'
, 'var user = require(\'./routes/user\');'
, 'var http = require(\'http\');'
, 'var path = require(\'path\');'
, ''
, 'var app = express();'
, ''
, '// all environments'
, 'app.set(\'port\', process.env.PORT || 3000);'
, 'app.set(\'views\', path.join(__dirname, \'views\'));'
, 'app.set(\'view engine\', \':TEMPLATE\');'
, 'app.use(express.favicon());'
, 'app.use(express.logger(\'dev\'));'
, 'app.use(express.json());'
, 'app.use(express.urlencoded());'
, 'app.use(express.methodOverride());{sess}'
, 'app.use(app.router);{css}'
, 'app.use(express.static(path.join(__dirname, \'public\')));'
, ''
, '// development only'
, 'if (\'development\' == app.get(\'env\')) {'
, ' app.use(express.errorHandler());'
, '}'
, ''
, 'app.get(\'/\', routes.index);'
, 'app.get(\'/users\', user.list);'
, ''
, 'http.createServer(app).listen(app.get(\'port\'), function(){'
, ' console.log(\'Express server listening on port \' + app.get(\'port\'));'
, '});'
, ''
].join(eol);
// Generate application
(function createApplication(path) {
emptyDirectory(path, function(empty){
if (empty || program.force) {
createApplicationAt(path);
} else {
confirm('destination is not empty, continue? [y/N] ', function (ok) {
if (ok) {
process.stdin.destroy();
createApplicationAt(path);
} else {
abort('aborting');
}
});
}
});
})(path);
/**
* Prompt for confirmation on STDOUT/STDIN
*/
function confirm(msg, callback) {
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question(msg, function (input) {
rl.close();
callback(/^y|yes|ok|true$/i.test(input));
});
}
/**
* Create application at the given directory `path`.
*
* @param {String} path
*/
function createApplicationAt(path) {
console.log();
process.on('exit', function(){
console.log();
console.log(' install dependencies:');
console.log(' $ cd %s && npm install', path);
console.log();
console.log(' run the app:');
console.log(' $ node app');
console.log();
});
mkdir(path, function(){
mkdir(path + '/public');
mkdir(path + '/public/javascripts');
mkdir(path + '/public/images');
mkdir(path + '/public/stylesheets', function(){
switch (program.css) {
case 'less':
write(path + '/public/stylesheets/style.less', less);
break;
case 'stylus':
write(path + '/public/stylesheets/style.styl', stylus);
break;
default:
write(path + '/public/stylesheets/style.css', css);
}
});
mkdir(path + '/routes', function(){
write(path + '/routes/index.js', index);
write(path + '/routes/user.js', users);
});
mkdir(path + '/views', function(){
switch (program.template) {
case 'ejs':
write(path + '/views/index.ejs', ejsIndex);
break;
case 'jade':
write(path + '/views/layout.jade', jadeLayout);
write(path + '/views/index.jade', jadeIndex);
break;
case 'jshtml':
write(path + '/views/layout.jshtml', jshtmlLayout);
write(path + '/views/index.jshtml', jshtmlIndex);
break;
case 'hjs':
write(path + '/views/index.hjs', hoganIndex);
break;
}
});
// CSS Engine support
switch (program.css) {
case 'less':
app = app.replace('{css}', eol + 'app.use(require(\'less-middleware\')({ src: path.join(__dirname, \'public\') }));');
break;
case 'stylus':
app = app.replace('{css}', eol + 'app.use(require(\'stylus\').middleware(path.join(__dirname, \'public\')));');
break;
default:
app = app.replace('{css}', '');
}
// Session support
app = app.replace('{sess}', program.sessions
? eol + 'app.use(express.session({ secret: \'your secret here\' }));'
: '');
// Template support
app = app.replace(':TEMPLATE', program.template);
// package.json
var pkg = {
name: 'application-name'
, version: '0.0.1'
, private: true
, scripts: { start: 'node app.js' }
, dependencies: {
express: version
}
}
if (program.template) pkg.dependencies[program.template] = '*';
// CSS Engine support
switch (program.css) {
case 'less':
pkg.dependencies['less-middleware'] = '~0.1.15';
break;
default:
if (program.css) {
pkg.dependencies[program.css] = '*';
}
}
write(path + '/package.json', JSON.stringify(pkg, null, 2));
write(path + '/app.js', app);
});
}
/**
* 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);
}
/**
* Mkdir -p.
*
* @param {String} path
* @param {Function} fn
*/
function mkdir(path, fn) {
mkdirp(path, 0755, function(err){
if (err) throw err;
console.log(' \033[36mcreate\033[0m : ' + path);
fn && fn();
});
}
/**
* Exit with the given `str`.
*
* @param {String} str
*/
function abort(str) {
console.error(str);
process.exit(1);
}

29
examples/README.md Normal file
View File

@@ -0,0 +1,29 @@
# Express examples
This page contains list of examples using Express.
- [auth](./auth) - Authentication with login and password
- [content-negotiation](./content-negotiation) - HTTP content negotiation
- [cookie-sessions](./cookie-sessions) - Working with cookie-based sessions
- [cookies](./cookies) - Working with cookies
- [downloads](./downloads) - Transferring files to client
- [ejs](./ejs) - Working with Embedded JavaScript templating (ejs)
- [error-pages](./error-pages) - Creating error pages
- [error](./error) - Working with error middleware
- [hello-world](./hello-world) - Simple request handler
- [markdown](./markdown) - Markdown as template engine
- [multi-router](./multi-router) - Working with multiple Express routers
- [mvc](./mvc) - MVC-style controllers
- [online](./online) - Tracking online user activity with `online` and `redis` packages
- [params](./params) - Working with route parameters
- [resource](./resource) - Multiple HTTP operations on the same resource
- [route-map](./route-map) - Organizing routes using a map
- [route-middleware](./route-middleware) - Working with route middleware
- [route-separation](./route-separation) - Organizing routes per each resource
- [search](./search) - Search API
- [session](./session) - User sessions
- [static-files](./static-files) - Serving static files
- [vhost](./vhost) - Working with virtual hosts
- [view-constructor](./view-constructor) - Rendering views dynamically
- [view-locals](./view-locals) - Saving data in request object between middleware calls
- [web-service](./web-service) - Simple API service

View File

@@ -1,27 +1,35 @@
'use strict'
/**
* Module dependencies.
*/
var express = require('../..')
, hash = require('./pass').hash;
var express = require('../..');
var hash = require('pbkdf2-password')()
var path = require('path');
var session = require('express-session');
var app = module.exports = express();
// config
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');
app.set('views', path.join(__dirname, 'views'));
// middleware
app.use(express.urlencoded({ extended: false }));
app.use(express.session({ secret: 'shhhh, very secret' }));
app.use(express.urlencoded({ extended: false }))
app.use(session({
resave: false, // don't save session if unmodified
saveUninitialized: false, // don't create session until something stored
secret: 'shhhh, very secret'
}));
// Session-persisted message middleware
app.use(function(req, res, next){
var err = req.session.error
, msg = req.session.success;
var err = req.session.error;
var msg = req.session.success;
delete req.session.error;
delete req.session.success;
res.locals.message = '';
@@ -39,7 +47,7 @@ var users = {
// when you create a user, generate a salt
// and hash the password ('foobar' is the pass here)
hash('foobar', function(err, salt, hash){
hash({ password: 'foobar' }, function (err, pass, salt, hash) {
if (err) throw err;
// store the salt & hash in the "db"
users.tj.salt = salt;
@@ -53,15 +61,15 @@ function authenticate(name, pass, fn) {
if (!module.parent) console.log('authenticating %s:%s', name, pass);
var user = users[name];
// query the db for the given username
if (!user) return fn(new Error('cannot find user'));
if (!user) return fn(null, null)
// apply the same algorithm to the POSTed password, applying
// the hash against the pass / salt, if there is a match we
// found the user
hash(pass, user.salt, function(err, hash){
hash({ password: pass, salt: user.salt }, function (err, pass, salt, hash) {
if (err) return fn(err);
if (hash == user.hash) return fn(null, user);
fn(new Error('invalid password'));
})
if (hash === user.hash) return fn(null, user)
fn(null, null)
});
}
function restrict(req, res, next) {
@@ -74,7 +82,7 @@ function restrict(req, res, next) {
}
app.get('/', function(req, res){
res.redirect('login');
res.redirect('/login');
});
app.get('/restricted', restrict, function(req, res){
@@ -93,13 +101,14 @@ app.get('/login', function(req, res){
res.render('login');
});
app.post('/login', function(req, res){
app.post('/login', function (req, res, next) {
authenticate(req.body.username, req.body.password, function(err, user){
if (err) return next(err)
if (user) {
// Regenerate session when signing in
// to prevent fixation
// to prevent fixation
req.session.regenerate(function(){
// Store the user's primary key
// 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;
@@ -112,7 +121,7 @@ app.post('/login', function(req, res){
req.session.error = 'Authentication failed, please check your '
+ ' username and password.'
+ ' (use "tj" and "foobar")';
res.redirect('login');
res.redirect('/login');
}
});
});

View File

@@ -1,48 +0,0 @@
// check out https://github.com/visionmedia/node-pwd
/**
* Module dependencies.
*/
var crypto = require('crypto');
/**
* Bytesize.
*/
var len = 128;
/**
* Iterations. ~300ms
*/
var iterations = 12000;
/**
* Hashes a password with optional `salt`, otherwise
* generate a salt for `pass` and invoke `fn(err, salt, hash)`.
*
* @param {String} password to hash
* @param {String} optional salt
* @param {Function} callback
* @api public
*/
exports.hash = function (pwd, salt, fn) {
if (3 == arguments.length) {
crypto.pbkdf2(pwd, salt, iterations, len, function(err, hash){
fn(err, hash.toString('base64'));
});
} else {
fn = salt;
crypto.randomBytes(len, function(err, salt){
if (err) return fn(err);
salt = salt.toString('base64');
crypto.pbkdf2(pwd, salt, iterations, len, function(err, hash){
if (err) return fn(err);
fn(null, salt, hash.toString('base64'));
});
});
}
};

View File

@@ -1,6 +1,8 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title><%= title %></title>
<style>
body {

View File

@@ -1,22 +1,21 @@
<% var title = 'Authentication Example' %>
<% include head %>
<%- include('head', { title: 'Authentication Example' }) -%>
<h1>Login</h1>
<%- message %>
Try accessing <a href="/restricted">/restricted</a>, then authenticate with "tj" and "foobar".
<form method="post" action="/login">
<p>
<label>Username:</label>
<input type="text" name="username">
<label for="username">Username:</label>
<input type="text" name="username" id="username">
</p>
<p>
<label>Password:</label>
<input type="text" name="password">
<label for="password">Password:</label>
<input type="text" name="password" id="password">
</p>
<p>
<input type="submit" value="Login">
</p>
</form>
<% include foot %>
<%- include('foot') -%>

View File

@@ -1,27 +0,0 @@
var express = require('../..')
, app = express();
app.set('views', __dirname);
app.set('view engine', 'jade');
var pets = [];
var n = 1000;
while (n--) {
pets.push({ name: 'Tobi', age: 2, species: 'ferret' });
pets.push({ name: 'Loki', age: 1, species: 'ferret' });
pets.push({ name: 'Jane', age: 6, species: 'ferret' });
}
app.use(express.logger('dev'));
app.get('/', function(req, res){
res.render('pets', { pets: pets });
});
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);
console.log('Express started on port 3000');
}

View File

@@ -1,12 +0,0 @@
style.
body {
padding: 50px;
font: 16px "Helvetica Neue", Helvetica;
}
table
for pet in pets
tr
td= pet.name
td= pet.age
td= pet.species

View File

@@ -1,3 +1,4 @@
'use strict'
var users = [];
@@ -5,4 +6,4 @@ users.push({ name: 'Tobi' });
users.push({ name: 'Loki' });
users.push({ name: 'Jane' });
module.exports = users;
module.exports = users;

View File

@@ -1,8 +1,10 @@
var express = require('../../')
, app = module.exports = express()
, users = require('./db');
'use strict'
// so either you can deal with different types of formatting
var express = require('../../');
var app = module.exports = express();
var users = require('./db');
// so either you can deal with different types of formatting
// for expected response in index.js
app.get('/', function(req, res){
res.format({
@@ -21,7 +23,7 @@ app.get('/', function(req, res){
json: function(){
res.json(users);
}
})
});
});
// or you could write a tiny middleware like
@@ -32,7 +34,7 @@ function format(path) {
var obj = require(path);
return function(req, res){
res.format(obj);
}
};
}
app.get('/users', format('./users'));

View File

@@ -1,3 +1,4 @@
'use strict'
var users = require('./db');

View File

@@ -1,30 +1,22 @@
'use strict'
/**
* Module dependencies.
*/
var cookieSession = require('cookie-session');
var express = require('../../');
var app = module.exports = express();
// ignore GET /favicon.ico
app.use(express.favicon());
// pass a secret to cookieParser() for signed cookies
app.use(express.cookieParser('manny is cool'));
// add req.session cookie support
app.use(express.cookieSession());
app.use(cookieSession({ secret: 'manny is cool' }));
// do something with the session
app.use(count);
// custom middleware
function count(req, res) {
req.session.count = req.session.count || 0;
var n = req.session.count++;
res.send('viewed ' + n + ' times\n');
}
app.get('/', function (req, res) {
req.session.count = (req.session.count || 0) + 1
res.send('viewed ' + req.session.count + ' times\n')
})
/* istanbul ignore next */
if (!module.parent) {

View File

@@ -1,30 +1,25 @@
'use strict'
/**
* Module dependencies.
*/
var express = require('../../')
, app = module.exports = express();
// add favicon() before logger() so
// GET /favicon.ico requests are not
// logged, because this middleware
// reponds to /favicon.ico and does not
// call next()
app.use(express.favicon());
var express = require('../../');
var app = module.exports = express();
var logger = require('morgan');
var cookieParser = require('cookie-parser');
// custom log format
if ('test' != process.env.NODE_ENV) app.use(express.logger(':method :url'));
if (process.env.NODE_ENV !== 'test') app.use(logger(':method :url'))
// parses request cookies, populating
// req.cookies and req.signedCookies
// when the secret is passed, used
// when the secret is passed, used
// for signing the cookies.
app.use(express.cookieParser('my secret here'));
app.use(cookieParser('my secret here'));
// parses json, x-www-form-urlencoded, and multipart/form-data
app.use(express.bodyParser());
// parses x-www-form-urlencoded
app.use(express.urlencoded({ extended: false }))
app.get('/', function(req, res){
if (req.cookies.remember) {

View File

@@ -1,46 +0,0 @@
/**
* Module dependencies.
*/
var express = require('../..')
, app = express()
, api = express();
// app middleware
app.use(express.static(__dirname + '/public'));
// api middleware
api.use(express.logger('dev'));
api.use(express.bodyParser());
/**
* CORS support.
*/
api.all('*', function(req, res, next){
if (!req.get('Origin')) return next();
// use "*" here to accept any origin
res.set('Access-Control-Allow-Origin', 'http://localhost:3000');
res.set('Access-Control-Allow-Methods', 'GET, POST');
res.set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type');
// res.set('Access-Control-Allow-Max-Age', 3600);
if ('OPTIONS' == req.method) return res.send(200);
next();
});
/**
* POST a user.
*/
api.post('/user', function(req, res){
console.log(req.body);
res.send(201);
});
app.listen(3000);
api.listen(3001);
console.log('app listening on 3000');
console.log('api listening on 3001');

View File

@@ -1,12 +0,0 @@
<!DOCTYPE html>
<html>
<body>
<script>
var req = new XMLHttpRequest;
req.open('POST', 'http://localhost:3001/user', false);
req.setRequestHeader('Content-Type', 'application/json');
req.send('{"name":"tobi","species":"ferret"}');
console.log(req.responseText);
</script>
</body>
</html>

View File

@@ -1,45 +0,0 @@
/**
* Module dependencies.
*/
var express = require('../../')
, app = module.exports = express();
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;
res.download(path);
});
// error handling middleware. Because it's
// below our routes, you will be able to
// "intercept" errors, otherwise Connect
// will respond with 500 "Internal Server Error".
app.use(function(err, req, res, next){
// special-case 404s,
// remember you could
// render a 404 template here
if (404 == err.status) {
res.statusCode = 404;
res.send('Cant find that file, sorry!');
} else {
next(err);
}
});
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);
console.log('Express started on port 3000');
}

View File

@@ -0,0 +1,2 @@
Only for test.
The file name is faked.

View File

@@ -0,0 +1,3 @@
* milk
* eggs
* bread

View File

@@ -0,0 +1,40 @@
'use strict'
/**
* Module dependencies.
*/
var express = require('../../');
var path = require('path');
var app = module.exports = express();
// path to where the files are stored on disk
var FILES_DIR = path.join(__dirname, 'files')
app.get('/', function(req, res){
res.send('<ul>' +
'<li>Download <a href="/files/notes/groceries.txt">notes/groceries.txt</a>.</li>' +
'<li>Download <a href="/files/amazing.txt">amazing.txt</a>.</li>' +
'<li>Download <a href="/files/missing.txt">missing.txt</a>.</li>' +
'<li>Download <a href="/files/CCTV大赛上海分赛区.txt">CCTV大赛上海分赛区.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){
res.download(req.params.file, { root: FILES_DIR }, function (err) {
if (!err) return; // file sent
if (err.status !== 404) return next(err); // non-404 error
// file for download not found
res.statusCode = 404;
res.send('Cant find that file, sorry!');
});
});
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);
console.log('Express started on port 3000');
}

View File

@@ -1,9 +1,11 @@
'use strict'
/**
* Module dependencies.
*/
var express = require('../../');
var path = require('path');
var app = module.exports = express();
@@ -22,7 +24,11 @@ app.engine('.html', require('ejs').__express);
// Optional since express defaults to CWD/views
app.set('views', __dirname + '/views');
app.set('views', path.join(__dirname, 'views'));
// Path to our public directory
app.use(express.static(path.join(__dirname, 'public')));
// Without this you would need to
// supply the extension to res.render()

View File

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

View File

@@ -2,12 +2,8 @@
<html lang="en">
<head>
<meta charset="utf-8">
<title> <%= title %> </title>
<style type="text/css">
body {
padding: 50px;
font: 13px Helvetica, Arial, sans-serif;
}
</style>
<meta name="viewport" content="width=device-width,initial-scale=1">
<title><%= title %></title>
<link rel="stylesheet" href="/stylesheets/style.css">
</head>
<body>

View File

@@ -1,4 +1,4 @@
<% include header.html %>
<%- include('header.html') -%>
<h1>Users</h1>
<ul id="users">
@@ -7,4 +7,4 @@
<% }) %>
</ul>
<% include footer.html %>
<%- include('footer.html') -%>

View File

@@ -1,13 +1,17 @@
'use strict'
/**
* Module dependencies.
*/
var express = require('../../')
, app = module.exports = express()
, silent = 'test' == process.env.NODE_ENV;
var express = require('../../');
var path = require('path');
var app = module.exports = express();
var logger = require('morgan');
var silent = process.env.NODE_ENV === 'test'
// general config
app.set('views', __dirname + '/views');
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// our custom "verbose errors" setting
@@ -17,67 +21,9 @@ app.enable('verbose errors');
// disable them in production
// use $ NODE_ENV=production node examples/error-pages
if ('production' == app.settings.env) app.disable('verbose errors');
if (app.settings.env === 'production') app.disable('verbose errors')
app.use(express.favicon());
silent || app.use(express.logger('dev'));
// "app.router" positions our routes
// above the middleware defined below,
// this means that Express will attempt
// to match & call routes _before_ continuing
// on, at which point we assume it's a 404 because
// no route has handled the request.
app.use(app.router);
// Since this is the last non-error-handling
// middleware use()d, we assume 404, as nothing else
// responded.
// $ curl http://localhost:3000/notfound
// $ curl http://localhost:3000/notfound -H "Accept: application/json"
// $ curl http://localhost:3000/notfound -H "Accept: text/plain"
app.use(function(req, res, next){
res.status(404);
// respond with html page
if (req.accepts('html')) {
res.render('404', { url: req.url });
return;
}
// respond with json
if (req.accepts('json')) {
res.send({ error: 'Not found' });
return;
}
// default to plain-text. send()
res.type('txt').send('Not found');
});
// error-handling middleware, take the same form
// as regular middleware, however they require an
// arity of 4, aka the signature (err, req, res, next).
// when connect has an error, it will invoke ONLY error-handling
// middleware.
// If we were to next() here any remaining non-error-handling
// middleware would then be executed, or if we next(err) to
// continue passing the error, only error-handling middleware
// would remain being executed, however here
// we simply respond with an error page.
app.use(function(err, req, res, next){
// we may use properties of the error object
// here and next(err) appropriately, or if
// we possibly recovered from the error, simply next().
res.status(err.status || 500);
res.render('500', { error: err });
});
silent || app.use(logger('dev'));
// Routes
@@ -104,6 +50,52 @@ app.get('/500', function(req, res, next){
next(new Error('keyboard cat!'));
});
// Error handlers
// Since this is the last non-error-handling
// middleware use()d, we assume 404, as nothing else
// responded.
// $ curl http://localhost:3000/notfound
// $ curl http://localhost:3000/notfound -H "Accept: application/json"
// $ curl http://localhost:3000/notfound -H "Accept: text/plain"
app.use(function(req, res, next){
res.status(404);
res.format({
html: function () {
res.render('404', { url: req.url })
},
json: function () {
res.json({ error: 'Not found' })
},
default: function () {
res.type('txt').send('Not found')
}
})
});
// error-handling middleware, take the same form
// as regular middleware, however they require an
// arity of 4, aka the signature (err, req, res, next).
// when connect has an error, it will invoke ONLY error-handling
// middleware.
// If we were to next() here any remaining non-error-handling
// middleware would then be executed, or if we next(err) to
// continue passing the error, only error-handling middleware
// would remain being executed, however here
// we simply respond with an error page.
app.use(function(err, req, res, next){
// we may use properties of the error object
// here and next(err) appropriately, or if
// we possibly recovered from the error, simply next().
res.status(err.status || 500);
res.render('500', { error: err });
});
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);

View File

@@ -1,3 +1,3 @@
<% include error_header %>
<%- include('error_header') -%>
<h2>Cannot find <%= url %></h2>
<% include footer %>
<%- include('footer') -%>

View File

@@ -1,8 +1,8 @@
<% include error_header %>
<%- include('error_header') -%>
<h2>Error: <%= error.message %></h2>
<% if (settings['verbose errors']) { %>
<pre><%= error.stack %></pre>
<% } else { %>
<p>An error occurred!</p>
<% } %>
<% include footer %>
<%- include('footer') -%>

View File

@@ -1,6 +1,8 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Error</title>
</head>

View File

@@ -1,6 +1,8 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Custom Pages Example</title>
</head>

View File

@@ -1,20 +1,15 @@
'use strict'
/**
* Module dependencies.
*/
var express = require('../../')
, app = module.exports = express()
, test = app.get('env') == 'test';
var express = require('../../');
var logger = require('morgan');
var app = module.exports = express();
var test = app.get('env') === 'test'
if (!test) app.use(express.logger('dev'));
app.use(app.router);
// the error handler is strategically
// placed *below* the app.router; if it
// were above it would not receive errors
// from app.get() etc
app.use(error);
if (!test) app.use(logger('dev'));
// error handling middleware have an arity of 4
// instead of the typical (req, res, next),
@@ -27,21 +22,30 @@ function error(err, req, res, next) {
if (!test) console.error(err.stack);
// respond with 500 "Internal Server Error".
res.send(500);
res.status(500);
res.send('Internal Server Error');
}
app.get('/', function(req, res){
app.get('/', function () {
// 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()
// The reason for process.nextTick() is to show that
// next() can be called inside an async operation,
// in real life it can be a DB read or HTTP request.
process.nextTick(function(){
next(new Error('oh no!'));
});
});
// the error handler is placed after routes
// if it were above it would not receive errors
// from app.get() etc
app.use(error);
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);

View File

@@ -1,63 +0,0 @@
var express = require('../..')
, app = express();
app.set('view engine', 'jade');
app.set('views', __dirname + '/views');
function User(name) {
this.private = 'heyyyy';
this.secret = 'something';
this.name = name;
this.id = 123;
}
// You'll probably want to do
// something like this so you
// dont expose "secret" data.
User.prototype.toJSON = function(){
return {
id: this.id,
name: this.name
}
};
app.use(express.logger('dev'));
// earlier on expose an object
// that we can tack properties on.
// all res.locals props are exposed
// to the templates, so "expose" will
// be present.
app.use(function(req, res, next){
res.locals.expose = {};
// you could alias this as req or res.expose
// to make it shorter and less annoying
next();
});
// pretend we loaded a user
app.use(function(req, res, next){
req.user = new User('Tobi');
next();
});
app.get('/', function(req, res){
res.redirect('/user');
});
app.get('/user', function(req, res){
// we only want to expose the user
// to the client for this route:
res.locals.expose.user = req.user;
res.render('page');
});
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);
console.log('Express started on port 3000');
}

View File

@@ -1,14 +0,0 @@
html
head
title Express
script.
// call this whatever you like,
// or dump them into individual
// props like "var user ="
var data = !{JSON.stringify(expose)}
body
h1 Expose client data
p The following was exposed to the client:
pre
script.
document.write(JSON.stringify(data, null, 2))

View File

@@ -1,7 +1,8 @@
'use strict'
var express = require('../../');
var app = express();
var app = module.exports = express()
app.get('/', function(req, res){
res.send('Hello World');

View File

@@ -1,48 +0,0 @@
/**
* Module dependencies.
*/
var express = require('../../lib/express');
// Path to our public directory
var pub = __dirname + '/public';
// setup middleware
var app = express();
app.use(app.router);
app.use(express.static(pub));
app.use(express.errorHandler());
// 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 });
});
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);
console.log('Express started on port 3000');
}

View File

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

View File

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

View File

@@ -1,5 +0,0 @@
doctype html
html
include header
body
block content

View File

@@ -1,8 +0,0 @@
extends ../layout
block content
h1 Users
#users
for user in users
include user

View File

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

View File

@@ -1,11 +1,14 @@
'use strict'
/**
* Module dependencies.
*/
var express = require('../..')
, fs = require('fs')
, md = require('marked').parse;
var escapeHtml = require('escape-html');
var express = require('../..');
var fs = require('fs');
var marked = require('marked');
var path = require('path');
var app = module.exports = express();
@@ -14,30 +17,25 @@ var app = module.exports = express();
app.engine('md', function(path, options, fn){
fs.readFile(path, 'utf8', function(err, str){
if (err) return fn(err);
try {
var html = md(str);
html = html.replace(/\{([^}]+)\}/g, function(_, name){
return options[name] || '';
})
fn(null, html);
} catch(err) {
fn(err);
}
var html = marked.parse(str).replace(/\{([^}]+)\}/g, function(_, name){
return escapeHtml(options[name] || '');
});
fn(null, html);
});
})
});
app.set('views', __dirname + '/views');
app.set('views', path.join(__dirname, 'views'));
// make it the default so we dont need .md
// make it the default, so we don't need .md
app.set('view engine', 'md');
app.get('/', function(req, res){
res.render('index', { title: 'Markdown Example' });
})
});
app.get('/fail', function(req, res){
res.render('missing', { title: 'Markdown Example' });
})
});
/* istanbul ignore next */
if (!module.parent) {

View File

@@ -0,0 +1,15 @@
'use strict'
var express = require('../../..');
var apiv1 = express.Router();
apiv1.get('/', function(req, res) {
res.send('Hello from APIv1 root route.');
});
apiv1.get('/users', function(req, res) {
res.send('List of APIv1 users.');
});
module.exports = apiv1;

View File

@@ -0,0 +1,15 @@
'use strict'
var express = require('../../..');
var apiv2 = express.Router();
apiv2.get('/', function(req, res) {
res.send('Hello from APIv2 root route.');
});
apiv2.get('/users', function(req, res) {
res.send('List of APIv2 users.');
});
module.exports = apiv2;

View File

@@ -0,0 +1,18 @@
'use strict'
var express = require('../..');
var app = module.exports = express();
app.use('/api/v1', require('./controllers/api_v1'));
app.use('/api/v2', require('./controllers/api_v2'));
app.get('/', function(req, res) {
res.send('Hello from root route.')
});
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);
console.log('Express started on port 3000');
}

View File

@@ -1,37 +0,0 @@
/**
* Module dependencies.
*/
var express = require('../..')
, format = require('util').format;
var app = module.exports = express()
// bodyParser in connect 2.x uses node-formidable to parse
// the multipart form data.
app.use(express.bodyParser())
app.get('/', function(req, res){
res.send('<form method="post" enctype="multipart/form-data">'
+ '<p>Title: <input type="text" name="title" /></p>'
+ '<p>Image: <input type="file" name="image" /></p>'
+ '<p><input type="submit" value="Upload" /></p>'
+ '</form>');
});
app.post('/', function(req, res, next){
// the uploaded file can be found as `req.files.image` and the
// title field as `req.body.title`
res.send(format('\nuploaded %s (%d Kb) to %s as %s'
, req.files.image.name
, req.files.image.size / 1024 | 0
, req.files.image.path
, req.body.title));
});
/* istanbul ignore next */
if (!module.parent) {
app.listen(3000);
console.log('Express started on port 3000');
}

View File

@@ -1,4 +1,5 @@
'use strict'
exports.index = function(req, res){
res.redirect('/users');
};
};

View File

@@ -1,3 +1,8 @@
'use strict'
/**
* Module dependencies.
*/
var db = require('../../db');
@@ -5,7 +10,7 @@ exports.engine = 'ejs';
exports.before = function(req, res, next){
var pet = db.pets[req.params.pet_id];
if (!pet) return next(new Error('Pet not found'));
if (!pet) return next('route');
req.pet = pet;
next();
};

View File

@@ -1,15 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/style.css">
<title>Edit <%= pet.name %></title>
</head>
<body>
<h1><%= pet.name %></h1>
<form action="/pet/<%= pet.id %>" method="post">
<input type="hidden" name="_method" value="put">
<label>Name: <input type="text" name="user[name]" value="<%= pet.name %>"></label>
<form action="/pet/<%= pet.id %>?_method=put" method="post">
<label>Name: <input type="text" name="pet[name]" value="<%= pet.name %>"></label>
<input type="submit" value="Update">
</form>
</body>

View File

@@ -1,6 +1,8 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/style.css">
<title><%= pet.name %></title>
</head>

View File

@@ -1,3 +1,8 @@
'use strict'
/**
* Module dependencies.
*/
var db = require('../../db');
@@ -8,7 +13,7 @@ exports.create = function(req, res, next){
var id = req.params.user_id;
var user = db.users[id];
var body = req.body;
if (!user) return next(new Error('User not found'));
if (!user) return next('route');
var pet = { name: body.pet.name };
pet.id = db.pets.push(pet) - 1;
user.pets.push(pet);

View File

@@ -1,6 +1,13 @@
'use strict'
/**
* Module dependencies.
*/
var db = require('../../db');
exports.engine = 'hbs';
exports.before = function(req, res, next){
var id = req.params.user_id;
if (!id) return next();
@@ -8,11 +15,11 @@ exports.before = function(req, res, next){
process.nextTick(function(){
req.user = db.users[id];
// cant find that user
if (!req.user) return next(new Error('User not found'));
if (!req.user) return next('route');
// found it, move on to the routes
next();
});
}
};
exports.list = function(req, res, next){
res.render('list', { users: db.users });

View File

@@ -0,0 +1,27 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/style.css">
<title>Edit {{user.name}}</title>
</head>
<body>
<h1>{{user.name}}</h1>
<form action="/user/{{user.id}}?_method=put" method="post">
<label for="user[name]">Name:
<input type="text" name="user[name]" value="{{user.name}}">
</label>
<input type="submit" name="submit" value="Update">
</form>
<form action="/user/{{user.id}}/pet" method="post">
<label for="pet[name]">Pet:
<input type="text" name="pet[name]" placeholder="Pet Name">
</label>
<input type="submit" name="submit" value="Add">
</form>
</body>
</html>

View File

@@ -1,12 +0,0 @@
<link rel="stylesheet" href="/style.css" />
<h1><%= user.name %></h1>
<form action='/user/<%= user.id %>' method='post'>
<input type="hidden" name="_method" value="put" />
<label>Name: <input type="text" name="user[name]" value="<%= user.name %>" /></label>
<input type="submit" value="Update" />
</form>
<form action='/user/<%= user.id %>/pet' method='post'>
<label>Pet: <input type="text" name="pet[name]" placeholder="name" /></label>
<input type="submit" value="Add" />
</form>

View File

@@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/style.css">
<title>Users</title>
</head>
<body>
<h1>Users</h1>
<p>Click a user below to view their pets.</p>
<ul>
{{#each users}}
<li><a href="/user/{{id}}">{{name}}</a></li>
{{/each}}
</ul>
</body>
</html>

View File

@@ -1,8 +0,0 @@
<link rel="stylesheet" href="/style.css" />
<h1>Users</h1>
<p>Click a user below to view their pets.</p>
<ul>
<% users.forEach(function(user){ %>
<li><a href="/user/<%= user.id %>"><%= user.name %></a></li>
<% }) %>
</ul>

View File

@@ -0,0 +1,31 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link rel="stylesheet" href="/style.css">
<title>{{user.name}}</title>
</head>
<body>
<h1>{{user.name}} <a href="/user/{{user.id}}/edit">edit</a></h1>
{{#if hasMessages}}
<ul>
{{#each messages}}
<li>{{this}}</li>
{{/each}}
</ul>
{{/if}}
{{#if user.pets.length}}
<p>View {{user.name}}'s pets:</p>
<ul>
{{#each user.pets}}
<li><a href="/pet/{{id}}">{{name}}</a></li>
{{/each}}
</ul>
{{else}}
<p>No pets!</p>
{{/if}}
</body>
</html>

View File

@@ -1,21 +0,0 @@
<link rel="stylesheet" href="/style.css" />
<h1><%= user.name %> <a href="/user/<%= user.id %>/edit">edit</a></h1>
<% if (hasMessages) { %>
<ul id="messages">
<% messages.forEach(function(msg){ %>
<li><%= msg %></li>
<% }) %>
</ul>
<% } %>
<% if (user.pets.length) { %>
<p>View <%= user.name %>s pets:</p>
<ul>
<% user.pets.forEach(function(pet){ %>
<li><a href="/pet/<%= pet.id %>"><%= pet.name %></a></li>
<% }) %>
</ul>
<% } else { %>
<p>No pets!</p>
<% } %>

View File

@@ -1,3 +1,4 @@
'use strict'
// faux database
@@ -12,4 +13,4 @@ var users = exports.users = [];
users.push({ name: 'TJ', pets: [pets[0], pets[1], pets[2]], id: 0 });
users.push({ name: 'Guillermo', pets: [pets[3]], id: 1 });
users.push({ name: 'Nathan', pets: [], id: 2 });
users.push({ name: 'Nathan', pets: [], id: 2 });

View File

@@ -1,17 +1,23 @@
'use strict'
/**
* Module dependencies.
*/
var express = require('../..');
var logger = require('morgan');
var path = require('path');
var session = require('express-session');
var methodOverride = require('method-override');
var app = module.exports = express();
// settings
// map .renderFile to ".html" files
app.engine('html', require('ejs').renderFile);
// make ".html" the default
app.set('view engine', 'html');
// set our default template engine to "ejs"
// which prevents the need for using file extensions
app.set('view engine', 'ejs');
// set views for error and 404 pages
app.set('views', __dirname + '/views');
app.set('views', path.join(__dirname, 'views'));
// define a custom res.message() method
// which stores messages in the session
@@ -25,19 +31,23 @@ app.response.message = function(msg){
};
// log
if (!module.parent) app.use(express.logger('dev'));
if (!module.parent) app.use(logger('dev'));
// serve static files
app.use(express.static(__dirname + '/public'));
app.use(express.static(path.join(__dirname, 'public')));
// session support
app.use(express.session({ secret: 'some secret here' }));
app.use(session({
resave: false, // don't save session if unmodified
saveUninitialized: false, // don't create session until something stored
secret: 'some secret here'
}));
// parse request bodies (req.body)
app.use(express.urlencoded({ extended: true }));
app.use(express.urlencoded({ extended: true }))
// support _method (PUT in forms etc)
app.use(express.methodOverride());
// allow overriding methods in query (?_method=put)
app.use(methodOverride('_method'));
// expose the "messages" local variable when views are rendered
app.use(function(req, res, next){
@@ -65,16 +75,9 @@ app.use(function(req, res, next){
// load controllers
require('./lib/boot')(app, { verbose: !module.parent });
// assume "not found" in the error msgs
// is a 404. this is somewhat silly, but
// valid, you can do whatever you like, set
// properties, use instanceof etc.
app.use(function(err, req, res, next){
// treat as 404
if (~err.message.indexOf('not found')) return next();
// log it
console.error(err.stack);
if (!module.parent) console.error(err.stack);
// error page
res.status(500).render('5xx');

View File

@@ -1,31 +1,31 @@
'use strict'
var express = require('../../..')
, fs = require('fs');
/**
* Module dependencies.
*/
var express = require('../../..');
var fs = require('fs');
var path = require('path');
module.exports = function(parent, options){
var dir = path.join(__dirname, '..', 'controllers');
var verbose = options.verbose;
fs.readdirSync(__dirname + '/../controllers').forEach(function(name){
fs.readdirSync(dir).forEach(function(name){
var file = path.join(dir, name)
if (!fs.statSync(file).isDirectory()) return;
verbose && console.log('\n %s:', name);
var obj = require('./../controllers/' + name)
, name = obj.name || name
, prefix = obj.prefix || ''
, app = express()
, method
, path;
var obj = require(file);
var name = obj.name || name;
var prefix = obj.prefix || '';
var app = express();
var handler;
var method;
var url;
// allow specifying the view engine
if (obj.engine) app.set('view engine', obj.engine);
app.set('views', __dirname + '/../controllers/' + name + '/views');
// before middleware support
if (obj.before) {
path = '/' + name + '/:' + name + '_id';
app.all(path, obj.before);
verbose && console.log(' ALL %s -> before', path);
path = '/' + name + '/:' + name + '_id/*';
app.all(path, obj.before);
verbose && console.log(' ALL %s -> before', path);
}
app.set('views', path.join(__dirname, '..', 'controllers', name, 'views'));
// generate routes based
// on the exported methods
@@ -36,38 +36,48 @@ module.exports = function(parent, options){
switch (key) {
case 'show':
method = 'get';
path = '/' + name + '/:' + name + '_id';
url = '/' + name + '/:' + name + '_id';
break;
case 'list':
method = 'get';
path = '/' + name + 's';
url = '/' + name + 's';
break;
case 'edit':
method = 'get';
path = '/' + name + '/:' + name + '_id/edit';
url = '/' + name + '/:' + name + '_id/edit';
break;
case 'update':
method = 'put';
path = '/' + name + '/:' + name + '_id';
url = '/' + name + '/:' + name + '_id';
break;
case 'create':
method = 'post';
path = '/' + name;
url = '/' + name;
break;
case 'index':
method = 'get';
path = '/';
url = '/';
break;
default:
/* istanbul ignore next */
throw new Error('unrecognized route: ' + name + '.' + key);
}
path = prefix + path;
app[method](path, obj[key]);
verbose && console.log(' %s %s -> %s', method.toUpperCase(), path, key);
// setup
handler = obj[key];
url = prefix + url;
// before middleware support
if (obj.before) {
app[method](url, obj.before, handler);
verbose && console.log(' %s %s -> before -> %s', method.toUpperCase(), url, key);
} else {
app[method](url, handler);
verbose && console.log(' %s %s -> %s', method.toUpperCase(), url, key);
}
}
// mount the app
parent.use(app);
});
};
};

View File

@@ -1,6 +1,6 @@
body {
padding: 50px;
font: 16px "Helvetica Neue", Helvetica, Arial;
font: 16px "Helvetica Neue", Helvetica, Arial, sans-serif;
}
a {
color: #107aff;

View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Not Found</title>
<link rel="stylesheet" href="/style.css">
</head>
<body>
<h1>404: Not Found</h1>
<p>Sorry we can't find <%= url %></p>
</body>
</html>

View File

@@ -1,3 +0,0 @@
<link rel="stylesheet" href="/style.css" />
<h1>404: Not Found</h1>
<p>Sorry we can't find <%= url %></p>

View File

@@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Internal Server Error</title>
<link rel="stylesheet" href="/style.css">
</head>
<body>
<h1>500: Internal Server Error</h1>
<p>Looks like something blew up!</p>
</body>
</html>

View File

@@ -1,3 +0,0 @@
<link rel="stylesheet" href="/style.css" />
<h1>500: Internal Server Error</h1>
<p>Looks like something blew up!</p>

View File

@@ -1,5 +1,9 @@
'use strict'
// first:
// install redis first:
// https://redis.io/
// then:
// $ npm install redis online
// $ redis-server
@@ -7,10 +11,10 @@
* Module dependencies.
*/
var express = require('../..')
, online = require('online')
, redis = require('redis')
, db = redis.createClient();
var express = require('../..');
var online = require('online');
var redis = require('redis');
var db = redis.createClient();
// online

View File

@@ -1,32 +1,26 @@
'use strict'
/**
* Module dependencies.
*/
var express = require('../../')
, app = module.exports = express();
var createError = require('http-errors')
var express = require('../../');
var app = module.exports = express();
// Faux database
var users = [
{ name: 'tj' }
{ name: 'tj' }
, { name: 'tobi' }
, { name: 'loki' }
, { name: 'jane' }
, { name: 'bandit' }
];
// Create HTTP error
function createError(status, message) {
var err = new Error(message);
err.status = status;
return err;
}
// Convert :to and :from to integers
app.param(['to', 'from'], function(req, res, next, num, name){
app.param(['to', 'from'], function(req, res, next, num, name){
req.params[name] = parseInt(num, 10);
if( isNaN(req.params[name]) ){
next(createError(400, 'failed to parseInt '+num));
@@ -57,7 +51,7 @@ app.get('/', function(req, res){
* GET :user.
*/
app.get('/user/:user', function(req, res, next){
app.get('/user/:user', function (req, res) {
res.send('user ' + req.user.name);
});
@@ -65,11 +59,11 @@ app.get('/user/:user', function(req, res, next){
* GET users :from - :to.
*/
app.get('/users/:from-:to', function(req, res, next){
var from = req.params.from
, to = req.params.to
, names = users.map(function(user){ return user.name; });
res.send('users ' + names.slice(from, to).join(', '));
app.get('/users/:from-:to', function (req, res) {
var from = req.params.from;
var to = req.params.to;
var names = users.map(function(user){ return user.name; });
res.send('users ' + names.slice(from, to + 1).join(', '));
});
/* istanbul ignore next */

View File

@@ -1,3 +1,4 @@
'use strict'
/**
* Module dependencies.
@@ -12,9 +13,9 @@ var app = module.exports = express();
app.resource = function(path, obj) {
this.get(path, obj.index);
this.get(path + '/:a..:b.:format?', function(req, res){
var a = parseInt(req.params.a, 10)
, b = parseInt(req.params.b, 10)
, format = req.params.format;
var a = parseInt(req.params.a, 10);
var b = parseInt(req.params.b, 10);
var format = req.params.format;
obj.range(req, res, a, b, format);
});
this.get(path + '/:id', obj.show);
@@ -27,7 +28,7 @@ app.resource = function(path, obj) {
// Fake records
var users = [
{ name: 'tj' }
{ name: 'tj' }
, { name: 'ciaran' }
, { name: 'aaron' }
, { name: 'guillermo' }
@@ -76,7 +77,7 @@ app.resource('/users', User);
app.get('/', function(req, res){
res.send([
'<h1>Examples:</h1> <ul>'
'<h1>Examples:</h1> <ul>'
, '<li>GET /users</li>'
, '<li>GET /users/1</li>'
, '<li>GET /users/3</li>'
@@ -84,7 +85,7 @@ app.get('/', function(req, res){
, '<li>GET /users/1..3.json</li>'
, '<li>DELETE /users/4</li>'
, '</ul>'
].join('\n'));
].join('\n'));
});
/* istanbul ignore next */

View File

@@ -1,7 +1,15 @@
'use strict'
var express = require('../../lib/express')
, verbose = process.env.NODE_ENV != 'test'
, app = module.exports = express();
/**
* Module dependencies.
*/
var escapeHtml = require('escape-html')
var express = require('../../lib/express');
var verbose = process.env.NODE_ENV !== 'test'
var app = module.exports = express();
app.map = function(a, route){
route = route || '';
@@ -26,7 +34,7 @@ var users = {
},
get: function(req, res){
res.send('user ' + req.params.uid);
res.send('user ' + escapeHtml(req.params.uid))
},
delete: function(req, res){
@@ -36,11 +44,11 @@ var users = {
var pets = {
list: function(req, res){
res.send('user ' + req.params.uid + '\'s pets');
res.send('user ' + escapeHtml(req.params.uid) + '\'s pets')
},
delete: function(req, res){
res.send('delete ' + req.params.uid + '\'s pet ' + req.params.pid);
res.send('delete ' + escapeHtml(req.params.uid) + '\'s pet ' + escapeHtml(req.params.pid))
}
};

View File

@@ -1,3 +1,5 @@
'use strict'
/**
* Module dependencies.
*/
@@ -15,7 +17,7 @@ var app = express();
// Dummy users
var users = [
{ id: 0, name: 'tj', email: 'tj@vision-media.ca', role: 'member' }
{ id: 0, name: 'tj', email: 'tj@vision-media.ca', role: 'member' }
, { id: 1, name: 'ciaran', email: 'ciaranj@gmail.com', role: 'member' }
, { id: 2, name: 'aaron', email: 'aaron.heckmann+github@gmail.com', role: 'admin' }
];
@@ -34,7 +36,7 @@ function loadUser(req, res, next) {
function andRestrictToSelf(req, res, next) {
// If our authenticated user is the user we are viewing
// then everything is fine :)
if (req.authenticatedUser.id == req.user.id) {
if (req.authenticatedUser.id === req.user.id) {
next();
} else {
// You may want to implement specific exceptions
@@ -47,7 +49,7 @@ function andRestrictToSelf(req, res, next) {
function andRestrictTo(role) {
return function(req, res, next) {
if (req.authenticatedUser.role == role) {
if (req.authenticatedUser.role === role) {
next();
} else {
next(new Error('Unauthorized'));

View File

@@ -1,23 +1,35 @@
'use strict'
/**
* Module dependencies.
*/
var express = require('../..')
, app = express()
, site = require('./site')
, post = require('./post')
, user = require('./user');
var express = require('../..');
var path = require('path');
var app = express();
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var methodOverride = require('method-override');
var site = require('./site');
var post = require('./post');
var user = require('./user');
module.exports = app;
// Config
app.set('view engine', 'jade');
app.set('views', __dirname + '/views');
app.use(express.logger('dev'));
app.use(express.cookieParser());
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.static(__dirname + '/public'));
app.set('view engine', 'ejs');
app.set('views', path.join(__dirname, 'views'));
/* istanbul ignore next */
if (!module.parent) {
app.use(logger('dev'));
}
app.use(methodOverride('_method'));
app.use(cookieParser());
app.use(express.urlencoded({ extended: true }))
app.use(express.static(path.join(__dirname, 'public')));
// General
@@ -25,7 +37,7 @@ app.get('/', site.index);
// User
app.all('/users', user.list);
app.get('/users', user.list);
app.all('/user/:id/:op?', user.load);
app.get('/user/:id', user.view);
app.get('/user/:id/view', user.view);

View File

@@ -1,3 +1,4 @@
'use strict'
// Fake posts database

View File

@@ -1,4 +1,5 @@
'use strict'
exports.index = function(req, res){
res.render('index', { title: 'Route Separation Example' });
};
};

View File

@@ -1,3 +1,4 @@
'use strict'
// Fake user database
@@ -16,7 +17,9 @@ exports.load = function(req, res, next){
if (req.user) {
next();
} else {
next(new Error('cannot find user ' + id));
var err = new Error('cannot find user ' + id);
err.status = 404;
next(err);
}
};
@@ -41,4 +44,4 @@ exports.update = function(req, res){
req.user.name = user.name;
req.user.email = user.email;
res.redirect('back');
};
};

View File

@@ -0,0 +1,2 @@
</body>
</html>

View File

@@ -0,0 +1,9 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title><%= title %></title>
<link rel="stylesheet" href="/style.css">
</head>
<body>

View File

@@ -0,0 +1,10 @@
<%- include('header') -%>
<h1><%= title %></h1>
<ul>
<li>Visit the <a href="/users">users</a> page.</li>
<li>Visit the <a href="/posts">posts</a> page.</li>
</ul>
<%- include('footer') -%>

View File

@@ -1,6 +0,0 @@
extends layout
block content
ul
li Visit the <a href="/users">users</a> page
li Visit the <a href="/posts">posts</a> page

View File

@@ -1,6 +0,0 @@
html
head
title= title
link(href="/style.css", rel="stylesheet")
body
block content

View File

@@ -0,0 +1,12 @@
<%- include('../header') -%>
<h1>Posts</h1>
<dl id="posts">
<% posts.forEach(function(post) { %>
<dt><%= post.title %></dt>
<dd><%= post.body %></dd>
<% }) %>
</dl>
<%- include('../footer') -%>

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