JSRE 使用方法
开始
代码调试方法
日志打印
开发过程中难以避免要进行各种日志打印与调试,但是过多的日志打印之后, 又需要进行大量日志清理工作。否则会严重影响性能。好在 JSRE 提供了丰富灵活的 API 完成这项工作。 如下所示:
- console.tagEnable
- console.tag
- console.tagFilterAdd
- console.inspectEnable
- console.depth
console.tagEnable = true; // default is false console.tag(module, "this is a test log", "...");
这一行短短的打印,就是一条调试信息了。开发者可以任意打印自己想要打印的日志。默认情况下,日志信息并不会被输出,调用一下 API 才会开启输出。
日志过滤输出
如果有大量 module 的日志输出,想要看到自己关注的日志就比较困难,此时可以使用以下代码来选择只看某个 module 的日志:
console.tagFilterAdd(["moduleName"]);
对象打印
如果有一个变量,需要被打印出来,方便查看,则可以使用以下代码:
const obj = { ... } console.inspectEnable = true console.tag(module, 'this is a test log for object display', obj)
查看日志
爱智在 81 端口上会输出爱智应用的日志,使用 telnet 工具即可连接获取日志输出。
telnet 192.168.128.1 81
Web 框架入门
EdgerOS 提供的 Web 框架功能非常丰富,在概念上与 expressjs 保持一致。如果您了解 expressjs 则学习 JSRE Web 框架将会很容易。
路由定义
// This will match paths starting with /abcd: app.get("/abcd", function(req, res) { // User handle. res.json({ ok: true }); });
参考以上事例,一个简单的路由就定义好了。支持 Get 请求,路径为 /abcd。如果要支持其他诸如 HEAD, POST, PUT, DELETE, OPTIONS 等等, 则只需要将上述例子中的 get 替换即可。如果有很多不同类型的路由定义, 为了代码组织更加清晰,也可以使用如下方式进行路由定义:
const userRouter = require("./routers/user"); const orderRouter = require("./routers/order"); app.use("/user", userRouter); app.use("/order", orderRouter);
./routers/user 和 ./routers/order 文件内容可以如下定义:
const Router = require("webapp").Router; const router = Router.create(); router.get("/", function(req, res) { res.send("I am a get request"); }); router.post("/", function(req, res) { res.send("I am a post request"); }); // etc module.exports = router;
安全
如果一个路由需要被保护,爱智也提供了相应机制。
- Get 请求如果满足以下条件,则会被自动保护:
- content-type 是 application/json 或 application/octet-stream
- 请求以
/api/
开头
- 非 Get 请求则全部会被自动保护。
被保护的请求 EdgerOS 会自动检查该请求是否携带 edger-token 和 edger-srand 这两个 header,关于这两个 header,详见安全机制。
- Get 请求如果满足以下条件,则会被自动保护:
中间件
中间件函数可以处理每一个请求和响应, 根据请求和响应决定是否进入下一个中间件或路由。如:
app.use(function(req, res, next) { console.log("Time: %d", Date.now()); next(); });
function (req, res, next) { console.log('Time: %d', Date.now()); next(); }
这个函数就是中间件函数, 通常包含三个参数请求 (req),响应 (res) 和中间件函数回调 (next)。如果想为每个请求打印一个日志,那么就可如上例所示一样, 打印一下日志即可。如果想要进行数据验证,则可以像下面代码一样:
const isValid = (param) => { // Just a demo return param != undefined; }; app.use(function(req, res, next) { const param1 = req.params.param1; if (!isValid(param1)) { res.status(500).json({ error: "invalid parameter found" }); return; } next(); });
在该代码中,如果检测到非法参数,则立即向客户端返回 500 状态码,并携带响应体,并且不再继续过其他中间件。
获取登录信息
EdgerOS 已经为爱智应用做了用户身份认证工作,开发者只需要通过 req.eos.user 来获取登录的用户信息即可。req.eos.user 对象包含` acoid, nickname 属性,分别表示该用户的翼辉 ID 和昵称。