72 lines
1.8 KiB
JavaScript
72 lines
1.8 KiB
JavaScript
const axios = require('axios');
|
|
const cheerio = require('cheerio');
|
|
const path = require('path');
|
|
const apiMocker = require('connect-api-mocker');
|
|
|
|
const HtmlWebpackPlugin = require('html-webpack-plugin');
|
|
|
|
module.exports = {
|
|
entry: {
|
|
main: './src/index.js',
|
|
},
|
|
output: {
|
|
path: path.resolve('./dist'),
|
|
filename: '[name].js',
|
|
},
|
|
devServer: {
|
|
client: {
|
|
overlay: {
|
|
errors: true,
|
|
warnings: false,
|
|
},
|
|
},
|
|
onBeforeSetupMiddleware: (devServer) => {
|
|
if (!devServer) {
|
|
throw new Error('webpack-dev-server가 정의되지 않았습니다.');
|
|
}
|
|
|
|
devServer.app.get('/api/detail/:url', (req, res) => {
|
|
const getHtml = async () => {
|
|
const url = `https://hub.zum.com/${req.params.url.replace(
|
|
/ /g,
|
|
'/'
|
|
)}`;
|
|
try {
|
|
return await axios.get(url);
|
|
} catch (error) {
|
|
console.error(error);
|
|
}
|
|
};
|
|
|
|
getHtml()
|
|
.then((html) => {
|
|
const $ = cheerio.load(html.data);
|
|
const data = {
|
|
title: $('div.article_header > div > div > h2').text(),
|
|
category: $(
|
|
'div.article_header > div > div > p.top > strong'
|
|
).html(),
|
|
mainContents: $('div.article.d_article').html(),
|
|
mediaName: $('#btn_media').text(),
|
|
};
|
|
|
|
return data;
|
|
})
|
|
.then((result) => res.send(result));
|
|
});
|
|
|
|
devServer.app.use(apiMocker('/api', 'mocks/api'));
|
|
},
|
|
},
|
|
mode: 'development', // 개발 모드
|
|
module: {
|
|
rules: [
|
|
{
|
|
test: /\.css$/,
|
|
use: ['style-loader', 'css-loader'],
|
|
},
|
|
],
|
|
},
|
|
plugins: [new HtmlWebpackPlugin({ template: './public/index.html' })],
|
|
};
|