的基本想法是,你創建的存儲爲字符串函數的數據庫。由於JS允許您使用Function()
構造函數從字符串創建函數,因此您可以根據需要動態生成函數。我提供了一個POST
端點來註冊該功能。
var express = require("express");
var app = express();
var bodyParser = require('body-parser');
var router = express.Router();
var mongoose = require('mongoose');
db = mongoose.connect('mongodb://localhost:27017/login1');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
var data = new mongoose.Schema({
"name": String,
"content": String
});
model = mongoose.model("functions", data);
router.post('/create', (req, res) => {
// Insert validation for security and removing duplicates etc.
model.insertMany({"name": req.body.name, "content": req.body.content}).then((d, err) => {
res.status(200).send({'result': "Added"});
});
});
router.get('/:func/*', (req, res) => {
var func = req.params.func;
var args = req.params['0'].split('/');
model.findOne({"name": func}).then((d, err) => {
if (err) {return res.status(404).send({'result': "Error with database"});}
else if (d === null) {return res.status(202).send({'result': "Function not present"});}
var func = Function(d.content);
res.status(200).send({'result': func(...args)});
});
});
app.use("/", router);
var port = process.env.PORT || 3000;
var server = app.listen(port, function() {
console.log('Express server listening on port ' + port);
});
讓測試:
$ node server.js
Express server listening on port 3000
從郵遞員或另一個終端窗口:
$ curl -X GET "http://localhost:3000/add/1/2/3"
{"result":"Function not present"}
現在讓註冊add
功能(這是sum of arguments
):
$ curl -X POST "http://localhost:3000/create/" -H "content-type:application/json" -d '{"name": "add", "content": "return [...arguments].reduce((i, j) => i+=parseInt(j), 0);"}'
{'result': "Added"}
這裏註冊的函數可能要複雜得多。請記住,您可以使用Agruments變量獲取傳遞給該函數的所有參數。
測試:
$ curl -X GET "http://localhost:3000/add/1/2/3"
{"result": 6}
$ curl -X GET "http://localhost:3000/add/100/3/5/10/9/2"
{"result": 129}
謝謝......這是「自動更新」的一部分,我不看他們如何實現... – SoftTimur
我看到......我看到有人使用nodemon。現在,我想知道更多的是他們在觸發自動更新之前將瀏覽器中更新的功能的內容傳遞給'router.get(...)'。 – SoftTimur