作者丨Can Mingir
譯者丨仇凱
我們創(chuàng)建了一個項目,它可以自動化處理Node.js中的數(shù)據(jù)和邏輯,從而有效減少代碼工作量。
低代碼框架Nucleoid在底層聲明性運行時環(huán)境中使用,并通過重新渲染非常相似的JavaScript代碼在圖中建立連接,并最終保存JavaScript狀態(tài),因此它不需要外部數(shù)據(jù)庫。
特性
- 讓開發(fā)人員在AI的幫助下構建API(大量的圖)
- 在底層聲明性運行時環(huán)境中使用
- 運行時環(huán)境內(nèi)置有數(shù)據(jù)存儲
Hello World
> npm i nucleoidjs1.
安裝后,通過Express.js啟動或運行代碼。
const nucleoid = require("nucleoidjs");const app = nucleoid();class User { constructor(name) { this.name = name; }}// This is it!app.post("/users", () => { new User("Daphne");});app.listen(3000);1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.
差不多就是這樣,多虧了運行時環(huán)境中的AI,能且僅能在AI的幫助下,才能在沒有外部數(shù)據(jù)庫的情況下將對象持久化。
理論
在運行時中運用聲明式編程,能夠實現(xiàn)在同一進程中對數(shù)據(jù)進行管理。
換句話說,該項目的主要目標是在同一運行時中管理數(shù)據(jù)和邏輯,同時,我們還可以將數(shù)據(jù)流/導出數(shù)據(jù)存儲在類似NoSQL一樣的外部數(shù)據(jù)庫中。
CRUD
快速設置
const nucleoid = require("nucleoidjs"); // npm install nucleoidjsconst app = nucleoid();1.2.
Create
首先,從創(chuàng)建用戶類和用戶對象開始。
class User {constructor(name) { this.name = name;}}nucleoid.register(User);app.post("/users", (req) => {const name = req.body.name;return new User(name);});1.2.3.4.5.6.7.8.9.10.11.12.
不需要外部數(shù)據(jù)庫的原因是Nucleoid運行時管理和存儲JavaScript狀態(tài)。每當有語句在運行時環(huán)境運行的時候,Nucleoid運行時都會調(diào)整AI圖并將其存儲在運行時管理的fs中。
Read
app.get("/users/:id", (req) => {const id = req.params.id;return User[id];});1.2.3.4.
當有User這樣的類注冊時,運行時會為其實例創(chuàng)建快捷方式數(shù)組,可以查詢或使用實例的id(var name)以在后續(xù)訪問類?;蛘撸部梢赃@樣做User.find(user => user.id === id)
Update & Delete
app.post("/users/:id", (req) => {const id = req.params.id;const name = req.body.name;const user = User[id];if (user) { user.name = name; return user;}});app.delete("/users/:id", (req) => {const id = req.params.id;delete User[id];});1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.
與上面的示例類似,它使用原生JavaScript,運行時重新渲染和管理JavaScript狀態(tài)。此外,還可以在JavaScript中編寫一些業(yè)務邏輯。例如,如果想對用戶名進行限制,可以這樣寫 if (user.name.length < 3) { throws "INVALID_USER" }。
Query
nucleoidjs包還打開了一個終端通道來運行SQL之類的語句
工作原理
nucleoid.run(() => {var a = 1;var b = a 2;var c = b 3;});1.2.3.4.5.
當變量被定義為 var a = 1時,運行時會做三件事情。首先,它將var a放在圖中,并在因變量之間建立聯(lián)系。
變量圖
其次,使用新值更新狀態(tài),以使其生效。
狀態(tài)表
但是,由于變量會在圖中被追蹤,因此實際執(zhí)行情況是不同的。
state.a = 1;state.b = state.a 2;state.c = state.b 3;1.2.3.
最后將語句存儲在運行時管理的fs中。
OpenAPI與Nucleoid IDE集成
我們還在構建一個在線的OpenAPI編輯器,它有助于通過用戶界面構建完全相同的API。它專為OpenAPI集成而設計,并且還連接到CodeSandbox,以便能夠輕松地在沙箱中運行項目。
IDE截圖
多虧了聲明式編程,我們有了一種全新的數(shù)據(jù)和邏輯方法。
原文鏈接:
?https://hackernoon.com/nucleoid-a-low-code-framework-for-nodejs??
仇凱,51CTO社區(qū)編輯,北京宅急送快運股份有限公司信息安全工程師。
責任編輯:張潔來源: 51CTO技術棧
版權聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。