Build & Run dev server
npm i
npm run build
npm run start
Testing
$ curl -X GET "http://localhost:3000/api/1/calc?x=92&y=67&op=ADD" | jq '.'
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 57 100 57 0 0 5838 0 --:--:-- --:--:-- --:--:-- 28500
{
"result": {
"z": 159
},
"request": {
"x": 92,
"y": 67,
"op": "ADD"
}
}
Docker
Build Docker image
docker build -t webpacked-server:0.5.0 --no-cache --progress plain -f Dockerfile ./
Run docker server
docker run --rm -p 3000:3000 --env-file .env-docker webpacked-server:0.5.0
Run (interactive shell)
docker run --rm -it --entrypoint sh -p 3000:3000 --env-file .env-docker webpacked-server:0.5.0
Inspecting image
$ docker run --rm -it --entrypoint sh -p 3000:3000 --env-file .env-docker webpacked-server:0.5.0
/app $ ls
d935069d9ae629f24d29.ts index.bundle.mjs node_modules
/app $ cd node_modules/
/app/node_modules $ ls
piscina
/app/node_modules $ cd ..
/app $ ls
d935069d9ae629f24d29.ts index.bundle.mjs node_modules
/app $ ls -al
total 3216
drwxr-xr-x 1 root root 4096 Sep 11 20:22 .
drwxr-xr-x 1 root root 4096 Sep 11 20:23 ..
-rw-r--r-- 1 node node 247 Sep 11 20:22 d935069d9ae629f24d29.ts
-rw-r--r-- 1 node node 3276531 Sep 11 20:22 index.bundle.mjs
drwxr-xr-x 3 node node 4096 Sep 11 20:22 node_modules
/app $ more d935069d9ae629f24d29.ts
import { CalcUtility } from '../calc-util';
export default async function run(data) {
let result = {
result: {
z: 0
},
request: data
};
result.result.z = CalcUtility.calc(data);
return result;
}
/app $
Runnning images:
$ docker run --rm -p 3000:3000 --env-file .env-docker webpacked-server:0.5.0
{
NODE_VERSION: '18.3.0',
HOSTNAME: 'a618450fe91e',
YARN_VERSION: '1.22.19',
SHLVL: '1',
HOME: '/home/node',
PATH: '/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin',
SERVER_HOST: '0.0.0.0',
PWD: '/app',
SERVER_PORT: '3000',
NODE_ENV: 'development'
}
http://0.0.0.0:3000
method path description
------ ----------- -----------
GET /api/1/calc Calculate
Server running at: http://0.0.0.0:3000
process.cwd = : /app
node:internal/event_target:908
process.nextTick(() => { throw err; });
^
TypeError [ERR_UNKNOWN_FILE_EXTENSION]: Unknown file extension ".ts" for /app/d935069d9ae629f24d29.ts
at new NodeError (node:internal/errors:377:5)
at Object.getFileProtocolModuleFormat [as file:] (node:internal/modules/esm/get_format:80:11)
at defaultGetFormat (node:internal/modules/esm/get_format:122:38)
at defaultLoad (node:internal/modules/esm/load:21:20)
at ESMLoader.load (node:internal/modules/esm/loader:431:26)
at ESMLoader.moduleProvider (node:internal/modules/esm/loader:350:22)
at new ModuleJob (node:internal/modules/esm/module_job:66:26)
at #createModuleJob (node:internal/modules/esm/loader:369:17)
at ESMLoader.getModuleJob (node:internal/modules/esm/loader:328:34)
at async Promise.all (index 0)
Emitted 'error' event on Piscina instance at:
at EventEmitterReferencingAsyncResource.runInAsyncScope (node:async_hooks:202:9)
at Piscina.emit (/app/node_modules/piscina/node_modules/eventemitter-asyncresource/dist/src/index.js:30:35)
at Worker.<anonymous> (/app/node_modules/piscina/dist/src/index.js:471:38)
at Worker.emit (node:events:527:28)
at [kOnErrorMessage] (node:internal/worker:289:10)
at [kOnMessage] (node:internal/worker:300:37)
at MessagePort.<anonymous> (node:internal/worker:201:57)
at [nodejs.internal.kHybridDispatch] (node:internal/event_target:639:20)
at exports.emitMessage (node:internal/per_context/messageport:23:28) {
code: 'ERR_UNKNOWN_FILE_EXTENSION'
}
Node.js v18.3.0