arco.server
v0.0.44
Published
Arco is a server web
Readme
Arco
Arco é um servidor web.
Como executar
No terminal execute o comando abaixo:
arco .- Definindo outro diretorio
arco /web/app- Descobrindo outros comandos
arco --helplink
cria um link simbolico para um diretório.
- Exemplo:
- dir1/subdir1
- dir2/subdir2
arco --link "@/:./dir1" --link "$:./dir2"- URL: http://site/@/subdir1
- URL: http://site/$subdir1
Options file
É possivel informar alguma forma de comportamento utilizando arquivos de configuração semelhante ao .htaccess do apache.
Exemplo:
- Arquivo: .arco.json
{
"rewrite":true,
"hidedir":true,
"headers":{
"X-SERVER":"My Server"
}
}- Atribudos disponiveis:
Atributo | valor | Descrição | Exemplo -------- | --- | --- rewrite | true,false,"force" | Ativa a reescrita de url hidedir | true,false | Oculta listagem de diretórios rewriteMatch | string | template de URL | "/api/projects/:project/plugins/:plugin" rewriteMatchStrict | true,false | compara exatamente a URL headers | object | Headers | {"X-SERVER":"My Server"}
Execute scripts
O servidor suporta as seguintes linguagens:
- javascript
- bashPara executar um arquivo de linguagem especifica, basta retornar o conteudo diretamente.
- Bash - simples:
# @server-execute
echo 'Hello World!'- Javascript - simples:
// @server-execute
console.log('Hello World!');É possivel definir respostas personalizadas, como o codigo HTTP e headers da requisição, porem a saida do arquivo executado deve seguir o padrão:
[::JSON_RESPONSE::]- Bash:
# @server-execute
echo '[::{"body":"123","code":203}::]'- Javascript
// @server-execute
import {request, output, files} from "arco";
output( 'Hello World!' ,{
"headers":{
"Content-Type": "application/json"
}
});Retornar ao client respostas pre-definidas
Altere o parametro "template" para uma das strings disponiveis (error, notfound, forbidden). Em "message" defina um texto para exibir na pagina..
import {request, output, files} from "arco.server";
output( request() ,{
"defaultResponse":{
"template":"error",
"message":"aaa2"
}
});Response with image buffer
import {request, output, files} from "arco.server";
output( files(0).buffer ,{
"headers":{
"Content-Type": files(0).mimetype
}
}); Stream
.arco.json
{
"headers":{
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
"Connection": "keep-alive"
}
}import {request, output, files} from "arco.server";
let count = 0;
let time = setInterval(()=>{
count++;
if(count >=4){
clearInterval(time);
output( count );
return;
}
output( count );
},1000);
Inject
- .arco.json
{
"inject":[
{
"filematch":"test.html",
"content":"<script>alert('inject html start')</script>",
"location":"head-start"
},{
"filematch":"*.*",
"content":"<script>alert('inject html end')</script>",
"location":"head-end"
},{
"filematch":"*",
"content":"<script>alert(2)</script>",
"location":"body-start"
},{
"filematch":"*",
"content":"novo-texto",
"location":"/texto(.*?)/"
}
]
}parametros disponiveis:
- filematch: nome do arquivo
- content: conteúdo a ser injectado
- location: local de inject(head-start|head-end|body-start|body-end|full|regex)
urlMatch
Cria match de url para o script index onde o .arco.json esta localizado. Disponibiliza também o parametro "params" com os valores de url.
- .arco.json
{
"urlMatch":{
"session":["/api/session/:session"],
"database":[
"/api/database/:database/minhabase/*:path",
"/api/database/:database/minhabase2/:id/abc"
]
}
}- index.js
import {request, output} from "arco.server";
let {urlMatch} = request();
if(urlMatch.session){
let {session} = urlMatch.session.params;
let response = await axios.get('http://domain/session/'+session);
output( response.data );
return;
}
output( null ,{
"defaultResponse":{
"template":"notfound",
"message":"Custom Not Found Message"
"output":"Message on page"
}
});Routes
- .arco.json
{
"onlyroutes":true,
"routes":{
"GET:/api/session/:session":{"target":"api/database/index.js"},
"POST:/api/database/:database/minhabase/:id":{"target":"api/database/index.js"},
"GET:/api/database/:database/minhabase/*id":{"target":"api/database/index.js"}
}
}parametros disponiveis:
onlyroutes: define se o servidor deve responder apenas as rotas - (true,false)
routes: define as rotas
"[METHOD]:[ROUTE]": {"target":[SCRIPT_FILE]}
Set compiler/transpiler
- .arco.json
{
"compiler":{
"javascript":"/home/user/.bun/bin/bun"
}
}