javascript-server
CΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ node12
ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° / instalation
$ npm install javascript-server
-
Server
- ΡΠ΅ΡΠ²ΠΈΠ½Π³ / static, dynamic -
Router
- ΡΠΎΡΡΠΈΠ½Π³ -
Api
- api (http post
only) -
Socket
- WebSocket server
Π½Π°ΡΡΡΠΎΠΉΠΊΠ° ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ / setting and usage
Π²Π°ΠΌ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΏΡΠΎΠ΅ΠΊΡ Π΄Π»Ρ node12
(es-module)
/api
index.js
controllers.js
/service
...
/htdocs
index.html
/libraries
...
index.js
router.js
package.json
package.json
- Π΄Π»Ρ node12 ΠΏΡΠΎΠ΅ΠΊΡ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅ΡΡ ΡΠΈΠΏmodule
{
"type": "module",
"scripts": {
"start": "node --experimental-modules index.js"
},
...
}
api/index.js
- config api
import {Api} from 'javascript-server';
import controllers from './api/controllers.js';
const config = {
method : 'post',
type : 'application/json',
route : '/api',
require: ['version', 'method'], // http query params
default: {
version: '1.0.0'
}
};
export default new Api(config).version('1.0.0', controllers);
// ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π²ΡΠ±ΠΎΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° Π°ΠΏΠΈ Π΄Π»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠ°
// Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
// .handler((api, request, data) => api.call(request.version, request.method, data));
api/controllers.js
- ΡΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ² api
import usersInfoService from '../service/usersInfoService.js';
import friendsInfoService from '../service/friendsInfoService.js';
export default {
debug: { // ΡΠ΅ΡΡΠΎΠ²ΡΠΉ ΡΠ°Π·Π΄Π΅Π» Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ
api: {
test: ({a, b}) => a + b
}
},
users: {
all: () => usersInfoService.allUsersList(),
get: ({id}) => usersInfoService.fromId(id),
...
},
friends: {
get: ({id}) => friendsInfoService.fromId(id),
add: ({id, user}) => friendsInfoService.follow(id, user),
remove: (id, user) => friendsInfoService.unfollow(id, user),
...
},
...
}
Π ΠΏΠ°ΠΏΠΊΠ΅
services
Π½ΡΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡΡ (usersInfoService
ΠΈfriendsInfoService
) ΠΈΠ»ΠΈ Π·Π°ΠΊΠΎΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΡΠΎΠΊΠΈ ΠΏΡΠΎ Π½ΠΈΡ
router.js
- ΡΠΎΡΡΠΈΠ½Π³
import {Router} from 'javascript-server';
export default new Router()
// static routing
.htdocs('/htdocs') // wwwroot folder
.static('/libraries', { // other folders for static libs, dependencies, etc
'/components': '/components',
'/static' : '/static'
})
// dynamic routing (?)
.get('/regex', request => { ... })
.post('/regex', request => { ... });
index.js
- server
import {Server} from 'javascript-server';
import router from './router.js';
import api from './api/index.js';
const server = Server.http({host: 'localhost', port: 8080});
server
.router(router)
.api(api)
.on('start', server => console.log(`server started on ${server.config.port}`)
.start();
Π·Π°ΠΏΡΡΠΊ
$ npm start
ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°
http://localhost:8080
- ΠΎΡΠΊΡΡΡΡ Π² Π±ΡΠ°ΡΠ·Π΅ΡΠ΅
ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ ΡΠ°ΠΉΠ»Π° /htdocs/index.html
ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ° -> console
- Π²ΡΠ·ΠΎΠ²Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄debug.api.test
const request = '/api?debug.api.test';
// ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ /api?method=debug.api.test
await fetch(request, {
method: 'post',
headers: {
"Content-type": "application/json; charset=UTF-8"
},
body: JSON.stringify({
a: 3,
b: 4
})
})
.then(response => response.text())
ΡΡΠΌΠΌΠ° ΡΠΈΡΠ΅Π» a
ΠΈ b
P.S. ΠΠΎΠΆΠ½ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎΠ½ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠ°ΠΊΠ΅Ρ javascript-fetch-api Π΄Π»Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ²