目录

导入Stdx包

开始编写你的第一个后端程序

完整代码:

后端

前端

最终效果

众所周知,我是写后端的,这刚出来一个新语言怎么能不用来写个简单的后端呢?qwq


        首先,使用官方的CodeArts IDE for Cangjie创建一个新项目

        


导入Stdx包

因为官方的http模块在stdx包里,需要手动下载并导入,所以首先下载stdx包并解压

stdx包下载地址

这里根据你的系统选择,下载完成后解压到任意位置,注意,如果是Windows端,路径下最好不要有非Ascii字符和空格

这里我是放在了项目目录下

然后配置cjpm.toml,在其中声明这个包

[target.你的架构]
    [target.你的架构.bin-dependencies]
        path-option = ["你存放stdx包的路径下dynamic\stdx"]

这个架构可以使用Cangjie的编译器查看(如果你配置了Path的话)

PS C:\Users\Your Username\Desktop\Backend> cjc -v
Cangjie Compiler: 1.0.0 (cjnative)
Target: x86_64-w64-mingw32

下面的Target就是你的架构

我的配置(Windows下记得转义)

保存时选择yes

至此,你的stdx包已经成功导入了



开始编写你的第一个后端程序

首先引入模块

import stdx.net.http.*
import std.fs.*

前者为官方的http模块,后者为文件系统模块

首先创建一个server对象

let server = ServerBuilder().addr("127.0.0.1").port(8080).build()
//为了可读性,可以写为多行格式
let server = ServerBuilder()
    .addr("127.0.0.1")
    .port(8080)
    .build()

 然后封装一个Server方法

func Server(){
}


然后注册一个路径并写回调(按道理来说,应该理解成回调,我不知道他应该叫什么,这是仓颉自己的一种语法糖,实际上第二位是一个Lambda表达式)

server.distributor.register("/",{HttpContext=>Judge_Method(HttpContext)})
//我这里是使用lambda表达式执行一个方法,并讲HttpContext传入其中

Jude_Method方法如下:

func Jude_Method(HttpContext:HttpContext){
    if(HttpContext.request.method=="GET"){
        let byte = File.readFrom('C:\\Users\\Your_Username\\Desktop\\LearnCangjie\\www\\index.html')
        let html = String.fromUtf8(html)
        HttpContext.responseBuilder.body(html)
    }
    else
    {
        HttpContext.responseBuilder.status(405)
    }
}

逻辑就是判断 HttpContext.request.method 的类型是否为GET,并且读取工程目录下www文件夹内的index.html,然后返回

核心代码:

let byte = File.readFrom('C:\\Users\\Your_Username\\Desktop\\LearnCangjie\\www\\index.html')
let html = String.fromUtf8(html)
HttpContext.responseBuilder.body(html)

因为仓颉的readFrom方法会将文件读取为Unicode码,所以需要使用String.fromUtf8()方法将其转换为字符,然后使用HttpContext.responseBuilder.body()将其返回即可

还有最重要的一件事,启动Server

server.serve()

完整代码:

后端
package Backend
import stdx.net.http.*
import std.fs.*

let server = ServerBuilder().addr("127.0.0.1").port(8080).build()

func Server(){
    server.distributor.register("/",{HttpContext=>Jude_Method(HttpContext)})
    //注册监听路径
    server.serve()
}


func Jude_Method(HttpContext:HttpContext){
    //判断请求方式
    if(HttpContext.request.method=="GET"){
        let byte = File.readFrom('C:\\Users\\yhvy5\\Desktop\\LearnCangjie\\www\\index.html')
        // 读取文件
        let html = String.fromUtf8(byte)
        HttpContext.responseBuilder.body(html)
    }
    else
    {
        HttpContext.responseBuilder.status(405)
    }
}

main(): Int64 {
    // 运行Server方法
    Server()
    return 0;
}
前端
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Cangjie</title>
</head>
<body>
    <h1>
        Hello!
        <br/>
        Cangjie!
    </h1>
</body>
</html>
最终效果
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐