ratty-blush
ratty-blush•2y ago

router.addHandler from a separate function

Say I have code like this:
import { createPlaywrightRouter, Dataset } from 'crawlee';

export const router = createPlaywrightRouter();

router.addHandler('CATEGORY', async ({ request, page, enqueueLinks, log }) => {
log.debug(`Enqueueing categories from page: ${request.url}`);

await page.waitForSelector('.collection-block-item');
await enqueueLinks({
selector: '.collection-block-item',
label: 'CATEGORY',
});
});
import { createPlaywrightRouter, Dataset } from 'crawlee';

export const router = createPlaywrightRouter();

router.addHandler('CATEGORY', async ({ request, page, enqueueLinks, log }) => {
log.debug(`Enqueueing categories from page: ${request.url}`);

await page.waitForSelector('.collection-block-item');
await enqueueLinks({
selector: '.collection-block-item',
label: 'CATEGORY',
});
});
Now I'm not particularly good in JS, so hoping that some JS gurus can chime in here, but is there any way that the callback async ({ request, page, enqueueLinks, log }) => { ... } could be put inside a separate function and instead pass the function to addHandler? So something like this:
import doStuff from './stuff';

router.addHandler('CATEGORY', doStuff);
import doStuff from './stuff';

router.addHandler('CATEGORY', doStuff);
2 Replies
Saurav Jain
Saurav Jain•2y ago
Our team will reply here soon. Expect a little delay due to few holidays. 🙂
ondro_k
ondro_k•2y ago
Hi, you can create a new function as follows:
// doStuff.js
export const doStuff = async ({ request, page, enqueueLinks, log }) => {
log.debug(`Enqueueing categories from page: ${request.url}`);

await page.waitForSelector('.collection-block-item');
await enqueueLinks({
selector: '.collection-block-item',
label: 'CATEGORY',
});
}
// doStuff.js
export const doStuff = async ({ request, page, enqueueLinks, log }) => {
log.debug(`Enqueueing categories from page: ${request.url}`);

await page.waitForSelector('.collection-block-item');
await enqueueLinks({
selector: '.collection-block-item',
label: 'CATEGORY',
});
}
You need to export it if you want to have it in different file.
// main.js
import { doStuff } from './stuff';
router.addHandler('CATEGORY', doStuff);
// main.js
import { doStuff } from './stuff';
router.addHandler('CATEGORY', doStuff);

Did you find this page helpful?