Skip to content

Commit 4802814

Browse files
authored
Merge pull request #10 from iliasbhal/master
update readme, better test
2 parents baf8f9e + 16b8a4d commit 4802814

File tree

7 files changed

+87
-31
lines changed

7 files changed

+87
-31
lines changed

README.md

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ Works with provider :
1313
- [x] **Google Cloud Platform - Cloud functions**
1414
- [ ] Microsoft Azure - Cloud functions | *in development*
1515

16-
## Installation
16+
## Download
1717
Type this command inside your terminal
1818
```
1919
npm install --save serverless-express
@@ -24,7 +24,7 @@ or for yarn users
2424
yarn add serverless-express
2525
```
2626

27-
## Usage
27+
## Installation
2828

2929
### 1 - Add it to your serverless.yml
3030

@@ -96,3 +96,41 @@ exports.handler = handler(app)
9696

9797
Now that everything is done, you can get back to work and enjoy serverless and express in the same time ;)
9898

99+
## Usage
100+
Make sure that you register an HTTP event for each endpoint of your express app.
101+
For example, if you register an endpoint like this one:
102+
```js
103+
app.get( '/users' , showUsers )
104+
```
105+
106+
You will need to make sure that your cloud provider routes the HTTP call to your app. In order to do so, you will need to update your serverless.yml like so :
107+
```yml
108+
# like this
109+
functions:
110+
app:
111+
handler: handler.handler #assuming your handler file is handler.js
112+
events:
113+
- http:
114+
path: GET
115+
method: /users
116+
117+
# or like this
118+
# be careful, this will route every HTTP event to your function.
119+
functions:
120+
app:
121+
handler: handler.handler
122+
events:
123+
- http:
124+
path: /{proxy+}
125+
method: ANY
126+
```
127+
128+
129+
130+
131+
132+
133+
### Todo
134+
135+
- [ ] create "serverless express yaml" command that updates the serverless.yml file with all the endpoints of the express app
136+

express.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,12 @@
11
const express = require('express')
2-
2+
const allowAccessControlOriginMiddleware = require('./src/access_control_middleare')
33

44
let slsExpress = () => implement(express())
55
Object.setPrototypeOf(slsExpress, express)
66
module.exports = slsExpress
77

88
function implement(app){
9-
app.use((req, res, next)=>{
10-
res.append('Access-Control-Allow-Origin', '*');
11-
next()
12-
})
13-
9+
app.use(allowAccessControlOriginMiddleware) // res.append('Access-Control-Allow-Origin', '*');
1410
switch( process.env.SERVERLESS_EXPRESS_PLATFORM ){
1511
case 'aws': return aws_express(app);
1612
case 'google': return google_express(app);
@@ -22,7 +18,7 @@ function implement(app){
2218

2319
function aws_express(app){
2420
const aws_middleware = require('./src/aws/aws_middleware')
25-
app.use(aws_middleware)
21+
app.use(aws_middleware)
2622
return app
2723
}
2824

package-lock.json

Lines changed: 8 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "serverless-express",
3-
"version": "2.0.5",
3+
"version": "2.0.6",
44
"description": "Run express apps on AWS λ easily.",
55
"main": "index.js",
66
"scripts": {

src/access_control_middleare.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
module.exports = (req, res, next)=>{
2+
res.append('Access-Control-Allow-Origin', '*');
3+
next()
4+
}

test/express.test.js

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -75,34 +75,46 @@ describe("serverless-express express", function() {
7575

7676
})
7777

78-
it('should Access-Control-Allow-Origin to everyone by defualt', function(done){
78+
it('should Access-Control-Allow-Origin to everyone by default', function(done){
7979

8080
let testIsCompleted = false
81-
let testRunned = 0
81+
let testsRunned = 0
82+
let testsToRun = tdd.supported_providers.length
83+
8284
tdd.supported_providers.forEach((provider)=>{
8385

84-
initPlugin({provider: provider})
86+
initPlugin({provider: 'google'})
8587
let app = sls_express()
8688
app.get('*', (req, res)=>{
8789
res.json(res)
8890
}) // if we don't register a route the middleware stack is not exposed
8991

90-
request(app).get('/')
91-
.then((res)=>{
92-
testRunned += 1
93-
console.log(res)
94-
expect(res.headers['access-control-allow-origin']).to.equal('*')
95-
96-
if( testRunned == tdd.supported_providers.length - 1){
97-
done()
98-
}
99-
100-
})
101-
102-
103-
// let injected = app._router.stack.filter( layer => layer && layer.handle == aws_middle ).length == 1
104-
// expect(injected).to.equal( provider == 'aws')
105-
92+
// console.log(mock.apiGatewayEvent())
93+
// // done()
94+
if( provider == 'aws'){
95+
96+
request(app).get('/', mock.apiGatewayEvent() )
97+
.then( (res)=>{
98+
let response = res.res
99+
let responseHeader = response.headers
100+
expect(responseHeader['access-control-allow-origin']).to.equal('*')
101+
testsRunned = testsRunned + 1
102+
if( testsRunned == testsToRun){ done() }
103+
})
104+
105+
} else {
106+
107+
request(app).get('/')
108+
.then((res)=>{
109+
let response = res.res
110+
let responseHeader = response.headers
111+
expect(res.headers['access-control-allow-origin']).to.equal('*')
112+
testsRunned = testsRunned + 1
113+
if( testsRunned == testsToRun ){ done() }
114+
})
115+
116+
}
117+
106118
})
107119

108120
})

test/src/mock.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ exports.generate = ()=>{
3232

3333
exports.apiGatewayEvent = (config)=>{
3434
let createEvent = require('aws-event-mocks');
35-
3635
config = config || {}
3736

3837
let path = config.path || '/'

0 commit comments

Comments
 (0)