JSRE 使用方法

更新时间:
2023-11-23
下载文档

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,详见安全机制

    • 中间件

      中间件函数可以处理每一个请求和响应, 根据请求和响应决定是否进入下一个中间件或路由。如:

      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 和昵称。

文档内容是否对您有所帮助?
有帮助
没帮助