diff --git a/.github/workflows/azure-static-web-apps-brave-sea-051dcb800.yml b/.github/workflows/azure-static-web-apps-brave-sea-051dcb800.yml new file mode 100644 index 0000000..f8a0acb --- /dev/null +++ b/.github/workflows/azure-static-web-apps-brave-sea-051dcb800.yml @@ -0,0 +1,45 @@ +name: Azure Static Web Apps CI/CD + +on: + push: + branches: + - main + pull_request: + types: [opened, synchronize, reopened, closed] + branches: + - main + +jobs: + build_and_deploy_job: + if: github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.action != 'closed') + runs-on: ubuntu-latest + name: Build and Deploy Job + steps: + - uses: actions/checkout@v2 + with: + submodules: true + - name: Build And Deploy + id: builddeploy + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_BRAVE_SEA_051DCB800 }} + repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) + action: "upload" + ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### + # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig + app_location: "/src" # App source code path + api_location: "" # Api source code path - optional + output_location: "" # Built app content directory - optional + ###### End of Repository/Build Configurations ###### + + close_pull_request_job: + if: github.event_name == 'pull_request' && github.event.action == 'closed' + runs-on: ubuntu-latest + name: Close Pull Request Job + steps: + - name: Close Pull Request + id: closepullrequest + uses: Azure/static-web-apps-deploy@v1 + with: + azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_BRAVE_SEA_051DCB800 }} + action: "close" diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..26786f9 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,5 @@ +{ + "recommendations": [ + "ms-azuretools.vscode-azurefunctions" + ] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..9306c8a --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,12 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Attach to Node Functions", + "type": "node", + "request": "attach", + "port": 9229, + "preLaunchTask": "func: host start" + } + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..361cb84 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "azureFunctions.deploySubpath": "api", + "azureFunctions.postDeployTask": "npm install (functions)", + "azureFunctions.projectLanguage": "JavaScript", + "azureFunctions.projectRuntime": "~4", + "debug.internalConsoleOptions": "neverOpen", + "azureFunctions.preDeployTask": "npm prune (functions)" +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..11f6628 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,32 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "type": "func", + "command": "host start", + "problemMatcher": "$func-node-watch", + "isBackground": true, + "dependsOn": "npm install (functions)", + "options": { + "cwd": "${workspaceFolder}/api" + } + }, + { + "type": "shell", + "label": "npm install (functions)", + "command": "npm install", + "options": { + "cwd": "${workspaceFolder}/api" + } + }, + { + "type": "shell", + "label": "npm prune (functions)", + "command": "npm prune --production", + "problemMatcher": [], + "options": { + "cwd": "${workspaceFolder}/api" + } + } + ] +} diff --git a/api.js b/api.js deleted file mode 100644 index 0cad494..0000000 --- a/api.js +++ /dev/null @@ -1,40 +0,0 @@ -import express from "express"; -import swaggerJSDoc from "swagger-jsdoc"; -import swaggerUi from "swagger-ui-express"; - -import news from "./routes/news.js"; - -const port = 5000; -const app = express(); - -const options = { - definition: { - openapi: "3.0.0", - info: { title: "Web API", version: "1.0.0" }, - }, - apis: ["./api.js", "./routes/*.js"], -}; - -const openapiSpec = await swaggerJSDoc(options); - -const UIoptions = { - explorer: true, -}; -app.use(express.json()); -app.use("/medee", news); -app.use("/medeepost", news); -app.use("/api-docs", swaggerUi.serve, swaggerUi.setup(openapiSpec, UIoptions)); - -/** - * @openapi - * /: - * get: - * description: Welcome to swagger-jsdoc! - * responses: - * 200: - * description: Returns a mysterious string. - */ - -app.listen(port, () => { - console.log("//localhost:5000"); -}); diff --git a/api/.funcignore b/api/.funcignore new file mode 100644 index 0000000..5179222 --- /dev/null +++ b/api/.funcignore @@ -0,0 +1,7 @@ +*.js.map +*.ts +.git* +.vscode +local.settings.json +test +tsconfig.json \ No newline at end of file diff --git a/api/.gitignore b/api/.gitignore new file mode 100644 index 0000000..01774db --- /dev/null +++ b/api/.gitignore @@ -0,0 +1,99 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TypeScript output +dist +out + +# Azure Functions artifacts +bin +obj +appsettings.json +local.settings.json + +# Azurite artifacts +__blobstorage__ +__queuestorage__ +__azurite_db*__.json \ No newline at end of file diff --git a/api/HttpTriggerApi/function.json b/api/HttpTriggerApi/function.json new file mode 100644 index 0000000..258cb10 --- /dev/null +++ b/api/HttpTriggerApi/function.json @@ -0,0 +1,19 @@ +{ + "bindings": [ + { + "authLevel": "function", + "type": "httpTrigger", + "direction": "in", + "name": "req", + "methods": [ + "get", + "post" + ] + }, + { + "type": "http", + "direction": "out", + "name": "res" + } + ] +} diff --git a/api/HttpTriggerApi/index.js b/api/HttpTriggerApi/index.js new file mode 100644 index 0000000..1a55d5c --- /dev/null +++ b/api/HttpTriggerApi/index.js @@ -0,0 +1,275 @@ +module.exports = async function (context, req) { + context.log("JavaScript HTTP trigger function processed a request."); + + context.res = { + // status: 200, /* Defaults to 200 */ + headers: { + "Content-Type": "application/json", + "Acces-Control-Allow-Origin": "*", + "Acces-Control-Allow-Methods": "GET,POST,PUT,PATCH,DELETE", + "Acces-Control-Allow-Headers": + "Origin, X-Requested-With, Content-Type, Accept", + }, + body: [ + { + id: "0", + title: "М-СИ-ЭС КОКА-КОЛА ХХК “ЭНТРЕПРЕНЕР – 2021” ОНЫ ...", + description: + "Монгол Улсын нийгэм, эдийн засгийн хөгжилд бодитой хувь нэмэр оруулж буй шилдэг, оны онцлох аж ахуйн нэгж, байгууллагууд,", + date: "2021.12.30", + }, + { + id: "1", + title: "М-СИ-ЭС КОКА-КОЛА ХХК МОНГОЛ УЛСЫН “ТОП-100 АЖ АХУЙН НЭГЖ”...", + description: + "Монгол Улсын Засгийн газар, МҮХАҮТ хамтран 2020 онд улс орныхоо нийгэм, эдийн засгийн хөгжилд бодитой хувь нэмэр оруулж буй ТОП 100 аж ахуй", + date: "2021.06.28", + }, + { + id: "2", + title: "М-СИ-ЭС КОКА-КОЛА КОМПАНИ ОЛИМПИЙН ХОРООТОЙ ХАМТ...", + description: + "М-Си-Эс Кока-Кола компани Олон Улсын Олимпийн өдрөөр хүн төрөлхтний үнэт өв эрдэнэ болох олимпийн соёл, боловсрол, түүхэн хуудсыг залуу...", + date: "2021.06.23", + }, + { + id: "3", + title: "М-СИ-ЭС КОКА-КОЛА ХХК ХАМТ ОЛОН (COVID-19) ЦАР ТАХЛЫН ЭСРЭГ...", + description: + "Коронавируст халдвар COVID-19 цар тахлын эсрэг ард иргэдийнхээ эрүүл, аюулгүй аж төрөх нөхцөлийг хангахаар цаг наргүй ажиллаж байгаа...", + date: "2021.04.17", + }, + { + id: "4", + title: "М-СИ-ЭС КОКА-КОЛА КОМПАНИ ОЛИМПИЙН ХОРООТОЙ ХАМТ", + description: + "М-Си-Эс Кока-Кола компани Олон Улсын Олимпийн өдрөөр хүн төрөлхтний үнэт өв эрдэнэ болох олимпийн соёл, боловсрол, түүхэн хуудсыг залуу хойч үедээ ", + date: "2021.03.03", + }, + { + id: "5", + title: "М-СИ-ЭС КОКА-КОЛА КОМПАНИ ҮЙЛДВЭРЭЭС ГАРСАН ХУВА ...", + description: + "Гуравдугаар сарын 18-ны өдөр “Дэлхийн дахин боловсруулах өдөр” тохиож буйтай холбогдуулан манай компани", + date: "2021.03.18", + }, + { + id: "6", + title: "MINUTE MAID ЖҮРЖИЙН ТАЛСТ ШИНЭЧЛЭГДЛЭЭ", + description: + "MINUTE MAID брэнд хэрэглэгч, харилцагчиддаа зориулж найрлага болон өнгө төрхөө шинэчлэлээ.Та бүхэнд шинэчлэгдсэн Minute Maid Жүржийн талстыг танилцуулж байна.", + date: "2021.03.12", + }, + { + id: "7", + title: "FANTA БРЭНДИЙН НЭР ТӨРЛҮҮДИЙН ИЛЧЛЭГИЙН ХЭМЖЭЭГ...", + description: + "М-Си-Эс Кока-Кола компани нь хэрэглэгчдийн хамгийн ихээр уухыг хүсдэг, чанартай бүтээгдэхүүнүүдийг үйлдвэрлэхийн тулд би...", + date: "2021.03.10", + }, + { + id: "8", + title: "М-СИ-ЭС КОКА-КОЛА КОМПАНИ ТҮҮХИЙ НҮҮРСИЙГ БҮРЭН ..", + description: + "Манай компани түүхий нүүрс шатаадаг технологийг бүрэн халж, хийн түлшээр ажилладаг уурын зуухыг ашиглалтад орууллаа.", + date: "2021.03.10", + }, + { + id: "9", + title: "М-СИ-ЭС КОКА-КОЛА ХХК АГААРЫН БОХИРДЛЫГ БУУРУУЛ...", + description: + "Монгол Улсын Засгийн Газраас хэрэгжүүлж буй “Агаарын бохирдлыг бууруулах талаар авах зарим арга хэмжээний тогтоол”, “Түүхий нүүрс хэрэглэхийг хориглох тухай 62-р тогтоол", + date: "2021.03.10", + }, + { + id: "10", + title: "SPRITE PLUS ХУДАЛДААНД ГАРЛАА", + description: + "M-Cи-Эс Кока-Кола компанийн хамт олон бид хэрэглэгч таны шингэний хэрэгцээг хангахундааны сонголтыг баялаг байлгахыг зо...", + date: "2020.03.11", + }, + { + id: "11", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "12", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "13", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "14", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "15", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "16", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "17", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "18", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "19", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "20", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "21", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "22", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "23", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "24", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "25", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "26", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "27", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "28", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "29", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "30", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "31", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "32", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "33", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "34", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "35", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + { + id: "36", + title: "Lorem ipsum dolor sit amet, consectetur adipiscing elit", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua", + date: "1999.09.09", + }, + ], + }; +}; diff --git a/api/HttpTriggerApi/sample.dat b/api/HttpTriggerApi/sample.dat new file mode 100644 index 0000000..26aac46 --- /dev/null +++ b/api/HttpTriggerApi/sample.dat @@ -0,0 +1,3 @@ +{ + "name": "Azure" +} \ No newline at end of file diff --git a/api/host.json b/api/host.json new file mode 100644 index 0000000..3f33af1 --- /dev/null +++ b/api/host.json @@ -0,0 +1,15 @@ +{ + "version": "2.0", + "logging": { + "applicationInsights": { + "samplingSettings": { + "isEnabled": true, + "excludedTypes": "Request" + } + } + }, + "extensionBundle": { + "id": "Microsoft.Azure.Functions.ExtensionBundle", + "version": "[2.*, 3.0.0)" + } +} diff --git a/api/package-lock.json b/api/package-lock.json new file mode 100644 index 0000000..0182bfb --- /dev/null +++ b/api/package-lock.json @@ -0,0 +1,64 @@ +{ + "name": "api", + "version": "1.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "api", + "version": "1.0.0", + "dependencies": { + "cors": "^2.8.5" + } + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + } + }, + "dependencies": { + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + } + } +} diff --git a/api/package.json b/api/package.json new file mode 100644 index 0000000..2e2a9c2 --- /dev/null +++ b/api/package.json @@ -0,0 +1,12 @@ +{ + "name": "api", + "version": "1.0.0", + "description": "", + "scripts": { + "start": "func start", + "test": "echo \"No tests yet...\"" + }, + "dependencies": { + "cors": "^2.8.5" + } +} diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 0000000..ca5c91a --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +mcscocacola.me \ No newline at end of file diff --git a/index.js b/index.js deleted file mode 100644 index a5155ee..0000000 --- a/index.js +++ /dev/null @@ -1,82 +0,0 @@ -const http = require("http"); - -const fs = require("fs"); -const { Pool } = require("pg"); -const urlObj = require("url"); - -const hostname = "127.0.0.1"; -const port = 5000; - -const server = http.createServer((req, res) => { - let urlPath = req.url.split("/")[1]; - console.log("file unshihiin umnu"); - //#region file read - // fs.readFile(urlPath, (err, data) => { - // if (err) { - // res.setHeader("Content-type", "text/html"); - // res.write("
${row.title} | ` + - // row.news + - // ` |