Skip to content

Commit 09f16b2

Browse files
committed
add subscription object validation logic before start scraping
1 parent 4f41d92 commit 09f16b2

File tree

4 files changed

+28
-14
lines changed

4 files changed

+28
-14
lines changed

Diff for: src/handlers/scrape.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,15 @@
22

33
const cheerio = require('cheerio')
44
const signale = require('signale')
5+
const Joi = require('joi')
56
const { crawl } = require('../libs/spider')
7+
const { lambda: schema } = require('../validations/subscription')
68

79
module.exports = (subscription, context, callback) => {
810
context.callbackWaitsForEmptyEventLoop = false
9-
const url = subscription.url
10-
signale.info(`Start scraping: ${url}`)
1111

12-
crawl(subscription.url)
12+
validate(subscription, schema)
13+
.then(crawl)
1314
.then(load)
1415
.then($ => parse(subscription, $))
1516
.then(res => {
@@ -19,11 +20,16 @@ module.exports = (subscription, context, callback) => {
1920
callback(null)
2021
})
2122
.catch(err => {
22-
signale.error(`Error scraping ${url}`, err)
23+
signale.error(`Error scraping ${subscription.url}`, err)
2324
callback(err)
2425
})
2526
}
2627

28+
function validate (subscription, schema) {
29+
return Joi.validate(subscription, schema)
30+
.then(({ url }) => url)
31+
}
32+
2733
function load (htmlStr) {
2834
return new Promise((resolve, reject) => {
2935
if (!htmlStr || typeof htmlStr !== 'string') {

Diff for: src/libs/spider.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ const signale = require('signale')
66
const BufferHelper = require('bufferhelper')
77

88
function crawl (url) {
9-
let charSet = ''
9+
signale.info(`Start scraping: ${url}`)
1010

11+
let charSet = ''
1112
return new Promise((resolve, reject) => {
1213
const bufferHelper = new BufferHelper()
1314
request({ url })

Diff for: src/routers/subscription.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
const express = require('express')
44
const validate = require('express-validation')
55
const { list, create, remove } = require('../handlers/subscription')
6-
const schema = require('../validations/subscription')
6+
const { express: schema } = require('../validations/subscription')
77
const router = express.Router()
88

99
router.get('/', list)

Diff for: src/validations/subscription.js

+15-8
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,20 @@
22

33
const Joi = require('joi')
44

5+
const schema = {
6+
url: Joi.string().regex(/^(http|https)/).required(),
7+
targets: Joi.array().items(Joi.object({
8+
label: Joi.string(),
9+
selector: Joi.string().required()
10+
})).required(),
11+
interval: Joi.number().min(15).required()
12+
}
13+
514
module.exports = {
6-
body: {
7-
url: Joi.string().regex(/^(http|https)/).required(),
8-
targets: Joi.array().items(Joi.object({
9-
label: Joi.string(),
10-
selector: Joi.string().required()
11-
})).required(),
12-
interval: Joi.number().required()
13-
}
15+
lambda: Object.assign({}, schema, {
16+
id: Joi.string().required(),
17+
createdAt: Joi.number().required(),
18+
updatedAt: Joi.number().required()
19+
}),
20+
express: { body: schema }
1421
}

0 commit comments

Comments
 (0)