使用“仓颉”实现一个简易后端(保姆级教程)
·
目录
众所周知,我是写后端的,这刚出来一个新语言怎么能不用来写个简单的后端呢?qwq
首先,使用官方的CodeArts IDE for Cangjie创建一个新项目

导入Stdx包
因为官方的http模块在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>
最终效果
更多推荐



所有评论(0)