Commit 011fa5ef authored by nemoNoboru's avatar nemoNoboru

people frontend acabado menos modify

parent e62ddad6
var express = require('express')
var cors = require('cors')
// bodyParser is a lib that parses POST & PUT data
var bodyParser = require('body-parser')
......@@ -11,6 +12,7 @@ var port = process.env.PORT || 8080;
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(cors())
var people_path = '/people'
......
......@@ -23,17 +23,17 @@
"tmp": "tmp/body-parser-1.16.1.tgz_1486777002177_0.4995518890209496"
},
"_npmUser": {
"name": "dougwilson",
"email": "doug@somethingdoug.com"
"email": "doug@somethingdoug.com",
"name": "dougwilson"
},
"_npmVersion": "2.15.9",
"_phantomChildren": {},
"_requested": {
"raw": "body-parser",
"scope": null,
"escapedName": "body-parser",
"name": "body-parser",
"raw": "body-parser",
"rawSpec": "",
"scope": null,
"spec": "latest",
"type": "tag"
},
......@@ -93,10 +93,10 @@
"node": ">= 0.8"
},
"files": [
"lib/",
"LICENSE",
"HISTORY.md",
"index.js"
"LICENSE",
"index.js",
"lib/"
],
"gitHead": "7b630f701d084267a8b9883b27f627014e003d47",
"homepage": "https://github.com/expressjs/body-parser#readme",
......
{
"env": {
"node": true
},
"rules": {
"indent": [2, 2],
"quotes": "single"
}
}
.DS_Store
node_modules
npm-debug.log
language: node_js
node_js:
- 0.10
# contributing to `cors`
CORS is a node.js package for providing a [connect](http://www.senchalabs.org/connect/)/[express](http://expressjs.com/) middleware that can be used to enable [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) with various options. Learn more about the project in [the README](README.md).
[![build status](https://secure.travis-ci.org/TroyGoode/node-cors.png)](http://travis-ci.org/TroyGoode/node-cors)
## The CORS Spec
[http://www.w3.org/TR/cors/](http://www.w3.org/TR/cors/)
## Pull Requests Welcome
* Include `'use strict';` in every javascript file.
* 2 space indentation.
* Please run the testing steps below before submitting.
## Testing
```bash
$ npm install
$ npm test
```
## Interactive Testing Harness
[http://node-cors-client.herokuapp.com](http://node-cors-client.herokuapp.com)
Related git repositories:
* [https://github.com/TroyGoode/node-cors-server](https://github.com/TroyGoode/node-cors-server)
* [https://github.com/TroyGoode/node-cors-client](https://github.com/TroyGoode/node-cors-client)
## License
[MIT License](http://www.opensource.org/licenses/mit-license.php)
The MIT License (MIT)
Copyright (c) 2013 Troy Goode <troygoode@gmail.com>
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.
# `cors`
CORS is a node.js package for providing a [Connect](http://www.senchalabs.org/connect/)/[Express](http://expressjs.com/) middleware that can be used to enable [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) with various options.
**[Follow me (@troygoode) on Twitter!](https://twitter.com/intent/user?screen_name=troygoode)**
[![NPM](https://nodei.co/npm/cors.png?downloads=true&stars=true)](https://nodei.co/npm/cors/)
[![build status](https://secure.travis-ci.org/expressjs/cors.svg?branch=master)](http://travis-ci.org/expressjs/cors)
* [Installation](#installation)
* [Usage](#usage)
* [Simple Usage](#simple-usage-enable-all-cors-requests)
* [Enable CORS for a Single Route](#enable-cors-for-a-single-route)
* [Configuring CORS](#configuring-cors)
* [Configuring CORS Asynchronously](#configuring-cors-asynchronously)
* [Enabling CORS Pre-Flight](#enabling-cors-pre-flight)
* [Configuration Options](#configuration-options)
* [Demo](#demo)
* [License](#license)
* [Author](#author)
## Installation (via [npm](https://npmjs.org/package/cors))
```bash
$ npm install cors
```
## Usage
### Simple Usage (Enable *All* CORS Requests)
```javascript
var express = require('express')
, cors = require('cors')
, app = express();
app.use(cors());
app.get('/products/:id', function(req, res, next){
res.json({msg: 'This is CORS-enabled for all origins!'});
});
app.listen(80, function(){
console.log('CORS-enabled web server listening on port 80');
});
```
### Enable CORS for a Single Route
```javascript
var express = require('express')
, cors = require('cors')
, app = express();
app.get('/products/:id', cors(), function(req, res, next){
res.json({msg: 'This is CORS-enabled for a Single Route'});
});
app.listen(80, function(){
console.log('CORS-enabled web server listening on port 80');
});
```
### Configuring CORS
```javascript
var express = require('express')
, cors = require('cors')
, app = express();
var corsOptions = {
origin: 'http://example.com',
optionsSuccessStatus: 200 // some legacy browsers (IE11, various SmartTVs) choke on 204
};
app.get('/products/:id', cors(corsOptions), function(req, res, next){
res.json({msg: 'This is CORS-enabled for only example.com.'});
});
app.listen(80, function(){
console.log('CORS-enabled web server listening on port 80');
});
```
### Configuring CORS w/ Dynamic Origin
```javascript
var express = require('express')
, cors = require('cors')
, app = express();
var whitelist = ['http://example1.com', 'http://example2.com'];
var corsOptions = {
origin: function(origin, callback){
var originIsWhitelisted = whitelist.indexOf(origin) !== -1;
callback(originIsWhitelisted ? null : 'Bad Request', originIsWhitelisted);
}
};
app.get('/products/:id', cors(corsOptions), function(req, res, next){
res.json({msg: 'This is CORS-enabled for a whitelisted domain.'});
});
app.listen(80, function(){
console.log('CORS-enabled web server listening on port 80');
});
```
### Enabling CORS Pre-Flight
Certain CORS requests are considered 'complex' and require an initial
`OPTIONS` request (called the "pre-flight request"). An example of a
'complex' CORS request is one that uses an HTTP verb other than
GET/HEAD/POST (such as DELETE) or that uses custom headers. To enable
pre-flighting, you must add a new OPTIONS handler for the route you want
to support:
```javascript
var express = require('express')
, cors = require('cors')
, app = express();
app.options('/products/:id', cors()); // enable pre-flight request for DELETE request
app.del('/products/:id', cors(), function(req, res, next){
res.json({msg: 'This is CORS-enabled for all origins!'});
});
app.listen(80, function(){
console.log('CORS-enabled web server listening on port 80');
});
```
You can also enable pre-flight across-the-board like so:
```
app.options('*', cors()); // include before other routes
```
### Configuring CORS Asynchronously
```javascript
var express = require('express')
, cors = require('cors')
, app = express();
var whitelist = ['http://example1.com', 'http://example2.com'];
var corsOptionsDelegate = function(req, callback){
var corsOptions;
if(whitelist.indexOf(req.header('Origin')) !== -1){
corsOptions = { origin: true }; // reflect (enable) the requested origin in the CORS response
}else{
corsOptions = { origin: false }; // disable CORS for this request
}
callback(null, corsOptions); // callback expects two parameters: error and options
};
app.get('/products/:id', cors(corsOptionsDelegate), function(req, res, next){
res.json({msg: 'This is CORS-enabled for a whitelisted domain.'});
});
app.listen(80, function(){
console.log('CORS-enabled web server listening on port 80');
});
```
## Configuration Options
* `origin`: Configures the **Access-Control-Allow-Origin** CORS header. Possible values:
- `Boolean` - set `origin` to `true` to reflect the [request origin](http://tools.ietf.org/html/draft-abarth-origin-09), as defined by `req.header('Origin')`, or set it to `false` to disable CORS.
- `String` - set `origin` to a specific origin. For example if you set it to `"http://example.com"` only requests from "http://example.com" will be allowed.
- `RegExp` - set `origin` to a regular expression pattern which will be used to test the request origin. If it's a match, the request origin will be reflected. For example the pattern `/example\.com$/` will reflect any request that is coming from an origin ending with "example.com".
- `Array` - set `origin` to an array of valid origins. Each origin can be a `String` or a `RegExp`. For example `["http://example1.com", /\.example2\.com$/]` will accept any request from "http://example1.com" or from a subdomain of "example2.com".
- `Function` - set `origin` to a function implementing some custom logic. The function takes the request origin as the first parameter and a callback (which expects the signature `err [object], allow [bool]`) as the second.
* `methods`: Configures the **Access-Control-Allow-Methods** CORS header. Expects a comma-delimited string (ex: 'GET,PUT,POST') or an array (ex: `['GET', 'PUT', 'POST']`).
* `allowedHeaders`: Configures the **Access-Control-Allow-Headers** CORS header. Expects a comma-delimited string (ex: 'Content-Type,Authorization') or an array (ex: `['Content-Type', 'Authorization']`). If not specified, defaults to reflecting the headers specified in the request's **Access-Control-Request-Headers** header.
* `exposedHeaders`: Configures the **Access-Control-Expose-Headers** CORS header. Expects a comma-delimited string (ex: 'Content-Range,X-Content-Range') or an array (ex: `['Content-Range', 'X-Content-Range']`). If not specified, no custom headers are exposed.
* `credentials`: Configures the **Access-Control-Allow-Credentials** CORS header. Set to `true` to pass the header, otherwise it is omitted.
* `maxAge`: Configures the **Access-Control-Max-Age** CORS header. Set to an integer to pass the header, otherwise it is omitted.
* `preflightContinue`: Pass the CORS preflight response to the next handler.
The default configuration is the equivalent of:
```json
{
"origin": "*",
"methods": "GET,HEAD,PUT,PATCH,POST,DELETE",
"preflightContinue": false
}
```
For details on the effect of each CORS header, read [this](http://www.html5rocks.com/en/tutorials/cors/) article on HTML5 Rocks.
## Demo
A demo that illustrates CORS working (and not working) using jQuery is available here: [http://node-cors-client.herokuapp.com/](http://node-cors-client.herokuapp.com/)
Code for that demo can be found here:
* Client: [https://github.com/TroyGoode/node-cors-client](https://github.com/TroyGoode/node-cors-client)
* Server: [https://github.com/TroyGoode/node-cors-server](https://github.com/TroyGoode/node-cors-server)
## License
[MIT License](http://www.opensource.org/licenses/mit-license.php)
## Author
[Troy Goode](https://github.com/TroyGoode) ([troygoode@gmail.com](mailto:troygoode@gmail.com))
(function () {
'use strict';
var vary = require('vary');
var defaults = {
origin: '*',
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
preflightContinue: false,
optionsSuccessStatus: 204
};
function isString(s) {
return typeof s === 'string' || s instanceof String;
}
function isOriginAllowed(origin, allowedOrigin) {
if (Array.isArray(allowedOrigin)) {
for (var i = 0; i < allowedOrigin.length; ++i) {
if (isOriginAllowed(origin, allowedOrigin[i])) {
return true;
}
}
return false;
} else if (isString(allowedOrigin)) {
return origin === allowedOrigin;
} else if (allowedOrigin instanceof RegExp) {
return allowedOrigin.test(origin);
} else {
return !!allowedOrigin;
}
}
function configureOrigin(options, req) {
var requestOrigin = req.headers.origin,
headers = [],
isAllowed;
if (!options.origin || options.origin === '*') {
// allow any origin
headers.push([{
key: 'Access-Control-Allow-Origin',
value: '*'
}]);
} else if (isString(options.origin)) {
// fixed origin
headers.push([{
key: 'Access-Control-Allow-Origin',
value: options.origin
}]);
headers.push([{
key: 'Vary',
value: 'Origin'
}]);
} else {
isAllowed = isOriginAllowed(requestOrigin, options.origin);
// reflect origin
headers.push([{
key: 'Access-Control-Allow-Origin',
value: isAllowed ? requestOrigin : false
}]);
if (isAllowed) {
headers.push([{
key: 'Vary',
value: 'Origin'
}]);
}
}
return headers;
}
function configureMethods(options) {
var methods = options.methods || defaults.methods;
if (methods.join) {
methods = options.methods.join(','); // .methods is an array, so turn it into a string
}
return {
key: 'Access-Control-Allow-Methods',
value: methods
};
}
function configureCredentials(options) {
if (options.credentials === true) {
return {
key: 'Access-Control-Allow-Credentials',
value: 'true'
};
}
return null;
}
function configureAllowedHeaders(options, req) {
var headers = options.allowedHeaders || options.headers;
if (!headers) {
headers = req.headers['access-control-request-headers']; // .headers wasn't specified, so reflect the request headers
} else if (headers.join) {
headers = headers.join(','); // .headers is an array, so turn it into a string
}
if (headers && headers.length) {
return {
key: 'Access-Control-Allow-Headers',
value: headers
};
}
return null;
}
function configureExposedHeaders(options) {
var headers = options.exposedHeaders;
if (!headers) {
return null;
} else if (headers.join) {
headers = headers.join(','); // .headers is an array, so turn it into a string
}
if (headers && headers.length) {
return {
key: 'Access-Control-Expose-Headers',
value: headers
};
}
return null;
}
function configureMaxAge(options) {
var maxAge = options.maxAge && options.maxAge.toString();
if (maxAge && maxAge.length) {
return {
key: 'Access-Control-Max-Age',
value: maxAge
};
}
return null;
}
function applyHeaders(headers, res) {
for (var i = 0, n = headers.length; i < n; i++) {
var header = headers[i];
if (header) {
if (Array.isArray(header)) {
applyHeaders(header, res);
} else if (header.key === 'Vary' && header.value) {
vary(res, header.value);
} else if (header.value) {
res.setHeader(header.key, header.value);
}
}
}
}
function cors(options, req, res, next) {
var headers = [],
method = req.method && req.method.toUpperCase && req.method.toUpperCase();
if (method === 'OPTIONS') {
// preflight
headers.push(configureOrigin(options, req));
headers.push(configureCredentials(options, req));
headers.push(configureMethods(options, req));
headers.push(configureAllowedHeaders(options, req));
headers.push(configureMaxAge(options, req));
headers.push(configureExposedHeaders(options, req));
applyHeaders(headers, res);
if (options.preflightContinue ) {
next();
} else {
res.statusCode = options.optionsSuccessStatus || defaults.optionsSuccessStatus;
res.end();
}
} else {
// actual response
headers.push(configureOrigin(options, req));
headers.push(configureCredentials(options, req));
headers.push(configureExposedHeaders(options, req));
applyHeaders(headers, res);
next();
}
}
function middlewareWrapper(o) {
// if no options were passed in, use the defaults
if (!o || o === true) {
o = {};
}
if (o.origin === undefined) {
o.origin = defaults.origin;
}
if (o.methods === undefined) {
o.methods = defaults.methods;
}
if (o.preflightContinue === undefined) {
o.preflightContinue = defaults.preflightContinue;
}
// if options are static (either via defaults or custom options passed in), wrap in a function
var optionsCallback = null;
if (typeof o === 'function') {
optionsCallback = o;
} else {
optionsCallback = function (req, cb) {
cb(null, o);
};
}
return function corsMiddleware(req, res, next) {
optionsCallback(req, function (err, options) {
if (err) {
next(err);
} else {
var originCallback = null;
if (options.origin && typeof options.origin === 'function') {
originCallback = options.origin;
} else if (options.origin) {
originCallback = function (origin, cb) {
cb(null, options.origin);
};
}
if (originCallback) {
originCallback(req.headers.origin, function (err2, origin) {
if (err2 || !origin) {
next(err2);
} else {
var corsOptions = Object.create(options);
corsOptions.origin = origin;
cors(corsOptions, req, res, next);
}
});
} else {
next();
}
}
});
};
}
// can pass either an options hash, an options delegate, or nothing
module.exports = middlewareWrapper;
}());
{
"_args": [
[
"cors",
"/home/nemboru/workshop/daa-custom-stack/backend/app"
]
],
"_from": "cors@latest",
"_id": "cors@2.8.1",
"_inCache": true,
"_installable": true,
"_location": "/cors",
"_nodeVersion": "6.2.1",
"_npmOperationalInternal": {
"host": "packages-16-east.internal.npmjs.com",
"tmp": "tmp/cors-2.8.1.tgz_1473366971988_0.42439922760240734"
},
"_npmUser": {
"email": "troygoode@gmail.com",
"name": "troygoode"
},
"_npmVersion": "3.9.3",
"_phantomChildren": {},
"_requested": {
"name": "cors",
"raw": "cors",
"rawSpec": "",
"scope": null,
"spec": "latest",
"type": "tag"
},
"_requiredBy": [
"/"
],
"_resolved": "https://registry.npmjs.org/cors/-/cors-2.8.1.tgz",
"_shasum": "6181aa56abb45a2825be3304703747ae4e9d2383",
"_shrinkwrap": null,
"_spec": "cors",
"_where": "/home/nemboru/workshop/daa-custom-stack/backend/app",
"author": {
"email": "troygoode@gmail.com",
"name": "Troy Goode",
"url": "https://github.com/troygoode/"
},
"bugs": {
"url": "https://github.com/expressjs/cors/issues"
},
"contributors": [
{
"name": "Troy Goode",
"email": "troygoode@gmail.com",
"url": "https://github.com/troygoode/"
}
],
"dependencies": {
"vary": "^1"
},
"description": "middleware for dynamically or statically enabling CORS in express/connect applications",
"devDependencies": {
"basic-auth-connect": "^1.0.0",
"body-parser": "^1.12.4",
"eslint": "^0.21.2",
"express": "^4.12.4",
"mocha": "^2.2.5",
"should": "^6.0.3",
"supertest": "^1.0.1"
},
"directories": {},
"dist": {
"shasum": "6181aa56abb45a2825be3304703747ae4e9d2383",
"tarball": "https://registry.npmjs.org/cors/-/cors-2.8.1.tgz"
},
"engines": {
"node": ">=0.10.0"
},
"gitHead": "458804a9ebd71a205a22d41da60f4cc5502a7776",
"homepage": "https://github.com/expressjs/cors/",
"keywords": [
"connect",
"cors",
"express",
"middleware"
],
"license": "MIT",
"main": "./lib/index.js",
"maintainers": [
{
"name": "troygoode",
"email": "troygoode@gmail.com"
},
{
"name": "dougwilson",
"email": "doug@somethingdoug.com"
}
],
"name": "cors",
"optionalDependencies": {},
"readme": "ERROR: No README data found!",
"repository": {
"type": "git",
"url": "git://github.com/expressjs/cors.git"
},
"scripts": {
"lint": "./node_modules/eslint/bin/eslint.js lib test",
"test": "npm run lint && ./node_modules/mocha/bin/mocha"
},
"version": "2.8.1"
}
(function () {
/*global describe, it*/
'use strict';
var should = require('should'),
express = require('express'),
supertest = require('supertest'),
basicAuth = require('basic-auth-connect'),
cors = require('../lib');
var app;
/* -------------------------------------------------------------------------- */
app = express();
app.use(basicAuth('username', 'password'));
app.use(cors());
app.post('/', function (req, res) {
res.send('hello world');
});
/* -------------------------------------------------------------------------- */
describe('basic auth', function () {
it('POST works', function (done) {
supertest(app)
.post('/')
.auth('username', 'password')
.expect(200)
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
res.text.should.eql('hello world');
done();
});
});
});
}());
(function () {
/*global describe, it*/
'use strict';
var should = require('should'),
express = require('express'),
supertest = require('supertest'),
bodyParser = require('body-parser'),
cors = require('../lib');
var dynamicOrigin,
app1,
app2,
text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed justo turpis, tempor id sem fringilla, cursus tristique purus. Mauris a sollicitudin magna. Etiam dui lacus, vehicula non dictum at, cursus vitae libero. Curabitur lorem nulla, sollicitudin id enim ut, vehicula rhoncus felis. Ut nec iaculis velit. Vivamus at augue nulla. Fusce at molestie arcu. Duis at dui at tellus mattis tincidunt. Vestibulum sit amet dictum metus. Curabitur nec pretium ante. Proin vulputate elit ac lorem gravida, sit amet placerat lorem fringilla. Mauris fermentum, diam et volutpat auctor, ante enim imperdiet purus, sit amet tincidunt ipsum nulla nec est. Fusce id ipsum in sem malesuada laoreet vitae non magna. Praesent commodo turpis in nulla egestas, eu posuere magna venenatis. Integer in aliquam sem. Fusce quis lorem tincidunt eros rutrum lobortis.\n\nNam aliquam cursus ipsum, a hendrerit purus. Cras ultrices viverra nunc ac lacinia. Sed sed diam orci. Vestibulum ut orci a nibh scelerisque pretium. Sed suscipit vestibulum metus, ac ultricies leo sodales a. Aliquam erat volutpat. Vestibulum mauris massa, luctus et libero vel, cursus suscipit nulla. Cras sed erat quis massa fermentum congue. Mauris ultrices sem ligula, id malesuada lectus tincidunt eget. Donec sed nisl elit. Aenean ac lobortis massa. Phasellus felis nisl, dictum a dui volutpat, dictum sagittis diam. Vestibulum lacinia tellus vel commodo consequat.\n\nNulla at varius nibh, non posuere enim. Curabitur urna est, ultrices vel sem nec, consequat molestie nisi. Aliquam sed augue sit amet ante viverra pretium. Cras aliquam turpis vitae eros gravida egestas. Etiam quis dolor non quam suscipit iaculis. Sed euismod est libero, ac ullamcorper elit hendrerit vitae. Vivamus sollicitudin nulla dolor, vitae porta lacus suscipit ac.\n\nSed volutpat, magna in scelerisque dapibus, eros ante volutpat nisi, ac condimentum diam sem sed justo. Aenean justo risus, bibendum vitae blandit ac, mattis quis nunc. Quisque non felis nec justo auctor accumsan non id odio. Mauris vel dui feugiat dolor dapibus convallis in et neque. Phasellus fermentum sollicitudin tortor ac pretium. Proin tristique accumsan nulla eu venenatis. Cras porta lorem ac arcu accumsan pulvinar. Sed dignissim leo augue, a pretium ante viverra id. Phasellus blandit at purus a malesuada. Nam et cursus mauris. Vivamus accumsan augue laoreet lectus lacinia eleifend. Fusce sit amet felis nunc. Pellentesque eu turpis nisl.\n\nPellentesque vitae quam feugiat, volutpat lectus et, faucibus massa. Maecenas consectetur quis nisi eu aliquam. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Etiam laoreet condimentum laoreet. Praesent sit amet massa sit amet dui porta condimentum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Sed volutpat massa nec risus malesuada hendrerit.';
/* -------------------------------------------------------------------------- */
dynamicOrigin = function (origin, cb) {
setTimeout(function () {
cb(null, true);
}, 200);
};
/* -------------------------------------------------------------------------- */
app1 = express();
app1.use(cors({origin: dynamicOrigin}));
app1.use(bodyParser.json());
app1.post('/', function (req, res) {
res.send(req.body);
});
/* -------------------------------------------------------------------------- */
app2 = express();
app2.use(bodyParser.json());
app2.use(cors({origin: dynamicOrigin}));
app2.post('/', function (req, res) {
res.send(req.body);
});
/* -------------------------------------------------------------------------- */
describe('body-parser-events', function () {
describe('app1 (cors before bodyparser)', function () {
it('POST works', function (done) {
var body = {
example: text
};
supertest(app1)
.post('/')
.send(body)
.expect(200)
.end(function (err, res) {
should.not.exist(err);
res.body.should.eql(body);
done();
});
});
});
describe('app2 (bodyparser before cors)', function () {
it('POST works', function (done) {
var body = {
example: text
};
supertest(app2)
.post('/')
.send(body)
.expect(200)
.end(function (err, res) {
should.not.exist(err);
res.body.should.eql(body);
done();
});
});
});
});
}());
This diff is collapsed.
(function () {
/*global describe, it*/
'use strict';
var should = require('should'),
express = require('express'),
supertest = require('supertest'),
cors = require('../lib');
var app;
/* -------------------------------------------------------------------------- */
app = express();
app.use(cors());
app.post('/five-hundred', function (req, res, next) {
next(new Error('nope'));
});
app.post('/four-oh-one', function (req, res, next) {
next(new Error('401'));
});
app.post('/four-oh-four', function (req, res, next) {
next();
});
app.use(function (err, req, res, next) {
if (err.message === '401') {
res.status(401).send('unauthorized');
} else {
next(err);
}
});
/* -------------------------------------------------------------------------- */
describe('error response', function () {
it('500', function (done) {
supertest(app)
.post('/five-hundred')
.expect(500)
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
res.text.should.startWith('Error: nope');
done();
});
});
it('401', function (done) {
supertest(app)
.post('/four-oh-one')
.expect(401)
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
res.text.should.eql('unauthorized');
done();
});
});
it('404', function (done) {
supertest(app)
.post('/four-oh-four')
.expect(404)
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
done();
});
});
});
}());
(function () {
/*global describe, it*/
'use strict';
var should = require('should'),
express = require('express'),
supertest = require('supertest'),
cors = require('../lib');
var simpleApp,
complexApp;
/* -------------------------------------------------------------------------- */
simpleApp = express();
simpleApp.head('/', cors(), function (req, res) {
res.status(204).send();
});
simpleApp.get('/', cors(), function (req, res) {
res.send('Hello World (Get)');
});
simpleApp.post('/', cors(), function (req, res) {
res.send('Hello World (Post)');
});
/* -------------------------------------------------------------------------- */
complexApp = express();
complexApp.options('/', cors());
complexApp.delete('/', cors(), function (req, res) {
res.send('Hello World (Delete)');
});
/* -------------------------------------------------------------------------- */
describe('example app(s)', function () {
describe('simple methods', function () {
it('GET works', function (done) {
supertest(simpleApp)
.get('/')
.expect(200)
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
res.text.should.eql('Hello World (Get)');
done();
});
});
it('HEAD works', function (done) {
supertest(simpleApp)
.head('/')
.expect(204)
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
done();
});
});
it('POST works', function (done) {
supertest(simpleApp)
.post('/')
.expect(200)
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
res.text.should.eql('Hello World (Post)');
done();
});
});
});
describe('complex methods', function () {
it('OPTIONS works', function (done) {
supertest(complexApp)
.options('/')
.expect(204)
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
done();
});
});
it('DELETE works', function (done) {
supertest(complexApp)
.del('/')
.expect(200)
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
res.text.should.eql('Hello World (Delete)');
done();
});
});
});
});
}());
(function () {
/*global describe, it*/
'use strict';
var should = require('should'),
express = require('express'),
supertest = require('supertest'),
cors = require('../lib');
var app,
corsOptions;
/* -------------------------------------------------------------------------- */
app = express();
corsOptions = {
origin: true,
methods: ['POST'],
credentials: true,
maxAge: 3600
};
app.options('/api/login', cors(corsOptions));
app.post('/api/login', cors(corsOptions), function (req, res) {
res.send('LOGIN');
});
/* -------------------------------------------------------------------------- */
describe('issue #2', function () {
it('OPTIONS works', function (done) {
supertest(app)
.options('/api/login')
.expect(204)
.set('Origin', 'http://example.com')
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('http://example.com');
done();
});
});
it('POST works', function (done) {
supertest(app)
.post('/api/login')
.expect(200)
.set('Origin', 'http://example.com')
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('http://example.com');
res.text.should.eql('LOGIN');
done();
});
});
});
}());
(function () {
/*global describe, it*/
'use strict';
var should = require('should'),
express = require('express'),
supertest = require('supertest'),
cors = require('../lib');
var app,
mainRouter,
itemsRouter;
/* -------------------------------------------------------------------------- */
itemsRouter = new express.Router();
itemsRouter.get('/', function (req, res) {
res.send('hello world');
});
mainRouter = new express.Router();
mainRouter.use('/items', itemsRouter);
app = express();
app.use(cors());
app.use(mainRouter);
/* -------------------------------------------------------------------------- */
describe('issue #31', function () {
it('OPTIONS works', function (done) {
supertest(app)
.options('/items')
.expect(204)
.set('Origin', 'http://example.com')
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
done();
});
});
it('GET works', function (done) {
supertest(app)
.get('/items')
.expect(200)
.set('Origin', 'http://example.com')
.end(function (err, res) {
should.not.exist(err);
res.headers['access-control-allow-origin'].should.eql('*');
res.text.should.eql('hello world');
done();
});
});
});
}());
--ui bdd
--reporter spec
--require should
......@@ -23,17 +23,17 @@
"tmp": "tmp/express-4.14.1.tgz_1485642795215_0.5481494057457894"
},
"_npmUser": {
"name": "dougwilson",
"email": "doug@somethingdoug.com"
"email": "doug@somethingdoug.com",
"name": "dougwilson"
},
"_npmVersion": "2.15.9",
"_phantomChildren": {},
"_requested": {
"raw": "express",
"scope": null,
"escapedName": "express",
"name": "express",
"raw": "express",
"rawSpec": "",
"scope": null,
"spec": "latest",
"type": "tag"
},
......@@ -47,8 +47,8 @@
"_spec": "express",
"_where": "/home/nemboru/workshop/daa-custom-stack/backend",
"author": {
"name": "TJ Holowaychuk",
"email": "tj@vision-media.ca"
"email": "tj@vision-media.ca",
"name": "TJ Holowaychuk"
},
"bugs": {
"url": "https://github.com/expressjs/express/issues"
......@@ -140,8 +140,8 @@
"node": ">= 0.10.0"
},
"files": [
"LICENSE",
"History.md",
"LICENSE",
"Readme.md",
"index.js",
"lib/"
......@@ -149,15 +149,15 @@
"gitHead": "0437c513f2dbc8d1dfc5a3e35fe35182bd3a671e",
"homepage": "http://expressjs.com/",
"keywords": [
"api",
"app",
"express",
"framework",
"sinatra",
"web",
"rest",
"restful",
"router",
"app",
"api"
"sinatra",
"web"
],
"license": "MIT",
"maintainers": [
......
......@@ -23,17 +23,17 @@
"tmp": "tmp/mongoose-4.8.2.tgz_1486792891220_0.38693167199380696"
},
"_npmUser": {
"name": "vkarpov15",
"email": "val@karpov.io"
"email": "val@karpov.io",
"name": "vkarpov15"
},
"_npmVersion": "3.10.8",
"_phantomChildren": {},
"_requested": {
"raw": "mongoose",
"scope": null,
"escapedName": "mongoose",
"name": "mongoose",
"raw": "mongoose",
"rawSpec": "",
"scope": null,
"spec": "latest",
"type": "tag"
},
......@@ -47,8 +47,8 @@
"_spec": "mongoose",
"_where": "/home/nemboru/workshop/daa-custom-stack/backend",
"author": {
"name": "Guillermo Rauch",
"email": "guillermo@learnboost.com"
"email": "guillermo@learnboost.com",
"name": "Guillermo Rauch"
},
"browser": "lib/browser.js",
"browserDependencies": {
......@@ -56,13 +56,13 @@
"chai": "3.5.0",
"karma": "0.12.16",
"karma-chai": "0.1.0",
"karma-mocha": "0.1.4",
"karma-chrome-launcher": "0.1.4",
"karma-mocha": "0.1.4",
"karma-sauce-launcher": "0.2.8"
},
"bugs": {
"url": "https://github.com/Automattic/mongoose/issues/new",
"email": "mongoose-orm@googlegroups.com"
"email": "mongoose-orm@googlegroups.com",
"url": "https://github.com/Automattic/mongoose/issues/new"
},
"dependencies": {
"async": "2.1.4",
......@@ -116,18 +116,18 @@
"gitHead": "5dffa95b9a5813c279d7b14537180773f38592b5",
"homepage": "http://mongoosejs.com",
"keywords": [
"mongodb",
"document",
"model",
"schema",
"database",
"odm",
"data",
"database",
"datastore",
"query",
"db",
"document",
"model",
"mongodb",
"nosql",
"odm",
"orm",
"db"
"query",
"schema"
],
"license": "MIT",
"main": "./index.js",
......
......@@ -15,6 +15,7 @@
"license": "ISC",
"dependencies": {
"body-parser": "^1.16.1",
"cors": "^2.8.1",
"express": "^4.14.1",
"mongoose": "^4.8.2"
}
......
var app = angular.module('daa',[])
app.service('people', function ($http) {
this.index = function (callback) {
$http.get('http://127.0.0.1:8000/people').then(callback)
}
this.remove = function (item,callback) {
$http.delete('http://127.0.0.1:8000/people/'+item._id).then(callback)
}
this.add = function (n,callback) {
$http.post('http://127.0.0.1:8000/people',{name:n}).then(callback)
}
})
app.controller('peopleCtrl',function ($scope,people) {
var self = this
this.load = function () {
people.index(function (people) {
console.log(people)
$scope.people_list = people.data
})
}
this.load()
$scope.remove = function (item) {
people.remove(item, self.load)
}
$scope.add = function () {
console.log("adding")
people.add($scope.name,self.load)
$scope.name = ''
}
})
<html>
<head>
<title>Flatten!</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="stylesheet" href="assets/css/main.css" />
<link rel="stylesheet" href="assets/css/flatten.css" />
</head>
<body ng-app='daa'>
<div ng-controller='peopleCtrl as $ctrl'>
<section class="wrapper style1 align-left" >
<div class="inner">
<header>
<h1>People!</h1>
<p>CRUD</p>
</header>
<div class="row">
<div class="10u">
<input type="text" ng-model = 'name'>
</div>
<div class="2u">
<button ng-click='add()'>Add</button>
</div>
</div>
<hr/>
<div class="box" ng-repeat='i in people_list'>{{i.name }}
<section class='align-right'>
<button class='align-right' ng-click='remove(i)'>Trash</button>
</section>
</div>
</div>
</section>
</div>
<script src="bower_components/jquery/dist/jquery.js"></script>
<script src="bower_components/angular/angular.js"></script>
<script src="core/daa.js"></script>
<script src="core/people.js"></script>
</body>
#!/bin/bash
echo 'http://127.0.0.1:8000'
sudo docker run -it -p 8000:80 flatten
echo 'http://127.0.0.1:8001'
sudo docker run -it -p 8001:80 flatten
#!/bin/bash
echo 'http://127.0.0.1:8000'
sudo docker run -it -p 8000:80 -v $(pwd)/app:/usr/share/nginx/html flatten
echo 'http://127.0.0.1:8001'
sudo docker run -it -p 8001:80 -v $(pwd)/app:/usr/share/nginx/html flatten
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment