├── views
└── pages
│ └── index.ejs
├── package.json
└── index.js
/views/pages/index.ejs:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Extract emails
5 |
6 |
7 |
13 |
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "emex",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "node index.js"
9 | },
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "body-parser": "^1.15.2",
14 | "ejs": "^2.5.2",
15 | "express": "^4.14.0",
16 | "lodash": "^4.16.2"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var app = express();
3 | var bodyParser = require('body-parser');
4 | var _ = require('lodash');
5 |
6 | app.set('port', (process.env.PORT || 5000));
7 | app.use(bodyParser.urlencoded({ extended: true }));
8 | app.use(bodyParser.json());
9 |
10 | app.use(express.static(__dirname + '/public'));
11 |
12 | // views is directory for all template files
13 | app.set('views', __dirname + '/views');
14 | app.set('view engine', 'ejs');
15 |
16 | app.get('/', function(request, response) {
17 | response.render('pages/index');
18 | });
19 |
20 | app.post('/parse', function(req, res) {
21 | var text = req.body.emails;
22 | var emails = _.uniqBy(extractEmails(text), e => e);
23 | res.setHeader('Content-disposition', 'attachment; filename=emails.csv');
24 | res.send(emails.join("\n"));
25 | });
26 |
27 | app.listen(app.get('port'), function() {
28 | console.log('Node app is running on port', app.get('port'));
29 | });
30 |
31 | function extractEmails(text) {
32 | return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
33 | }
34 |
--------------------------------------------------------------------------------