0到1手搓基于Node的CAP应用

一、开发环境

1、Nodejs

安装Nodejs,版本16+。

2、cds

在命令行中执行以下命令,安装cds开发工具。

npm i -g @sap/cds-dk

执行命令cds -v查看安装情况。
在这里插入图片描述

3、VScode

安装VSCODE

4、VScode扩展程序

查找SAP CDS Language Support,安装。
在这里插入图片描述

5、cf

下载cf安装包并安装。
在这里插入图片描述

6、mbt

npm i -g mbt

二、创建项目

1、创建项目

命令行执行命令,cds init cap-demo
在这里插入图片描述
在这里插入图片描述

2、安装依赖

在cap-demo目录下,执行npm i
在这里插入图片描述

3、运行

执行cds watch运行项目。
在这里插入图片描述

三、添加逻辑

1、定义model

db目录下创建model.cds文件,并添加以下代码,定义三个实体。

namespace my.demo;

using {managed} from '@sap/cds/common';

entity Employees {
    key ID     : Integer;
        name   : localized String;
        depart : Association to Departs;
        tasks  : Integer;
}

entity Departs {
    key ID        : Integer;
        name      : String;
        employees : Association to many Employees
                        on employees.depart = $self;
}

entity Orders : managed {
    key ID          : UUID;
        description : String;
        employee    : Association to Employees;
}

2、定义service

srv目录下创建service.cds,添加以下代码,暴露服务接口。

using my.demo as my from '../db/model';

service DemoService {
  entity Employees as projection on my.Employees;
  entity Departs as projection on my.Departs;
  entity Orders as projection on my.Orders;
}

3、预览

代码添加以后,cds会自动刷新服务,接口已经在本地运行。
在这里插入图片描述
浏览器访问http://localhost:4004
在这里插入图片描述

四、持久化

1、配置sqlite3

package.json中,添加cds节点。

"cds": {
    "requires": {
      "db": {
        "kind": "sqlite",
        "credentials": { "url": "db/demo.sqlite" }
      }
    }
  }

在这里插入图片描述

2、发布数据库

根目录下执行命令,发布demo数据库。

cds deploy

##

3、查看数据库

根目录下执行命令,查看demo数据库。

sqlite3 db/my-bookshop.db -cmd .dump

在这里插入图片描述

4、添加数据

根据model结构,是用Postman等工具添加数据。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、添加逻辑

在srv目录下创建service.js文件,添加以下代码。

module.exports = (srv) => {

    const {Employees} = cds.entities ('my.demo');
  
    srv.before('CREATE', 'Orders', async (req) => {
        const order = req.data
        const tx = cds.transaction(req);
        
        const employee = await tx.run(SELECT.one.from(Employees).where({ID: order.employee_ID}));
        if(!employee) {
            return req.error (404, "Employee does not exist!");
        }
        if(employee.tasks > 2) {
            return req.error (404, "Employee is busy!");
        }
        await tx.run (
            UPDATE (Employees)
            .set   ({ tasks: {'+=': 1}})
            .where ({ ID: order.employee_ID})
        );
        return req.info(200, "success");
    });
}

创建工单,并分配给指定员工,当员工未找到或者员工当前人物超过2个时报错。
在这里插入图片描述
在这里插入图片描述

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值