在 Ballerina lang 的模块中创建服务
Create service in a module in Ballerina lang
我有以下文件结构:
│ Ballerina.toml
│ main.bal
│
├───modules
│ ├───http_listener
│ │ http_listener.bal
│ │
│ └───question
│ │ .gitignore
│ │ question.bal
│ │ service.bal
│ │
│ └───tests
│ question_test.bal
│ service_test.bal
│
│
└───tests
在main.bal
中包含以下服务:
import question_management.http_listener;
service / on http_listener:QuestionManagementListener {
resource function get status() returns string {
return "UP";
}
}
http_listener只是一个听众:
import ballerina/http;
public listener http:Listener QuestionManagementListener = new(9095);
我面临的问题是 question/service.bal
中定义的服务未提供流量。服务定义如下:
import question_management.http_listener;
service /questions on http_listener:QuestionManagementListener {
resource function get allQuestions() returns string {
Question|error q = new Question("Test", ["1", "2", "3", "4", "5"]);
json[] qarray = [];
if(!(q is error)) { qarray.push(q.toJson()); }
return qarray.toJsonString();
}
}
然而,当我启动程序时,只有 /status
端点按预期响应。这
questions/allQuestions
正在响应 404
no matching resource found for path : /questions/allQuestions , method : GET
如果我将服务从 question/service.bal
移动到 main.bal
,/questions/allQuestions
将开始正常工作。但是,如果可能的话,我希望将我的服务定义放入它们自己的模块中。
要初始化的模块需要在程序中直接或间接导入。这也适用于同一包中的模块。由于 question_management.question
未直接导入到默认模块或由默认模块导入的模块中,因此 question_management.question
中的服务未初始化或附加到侦听器,这就是观察到此错误的原因.
可以使用导入前缀 _
导入模块以将其包含在程序中,而无需使用其中的符号。这将导致模块被初始化,然后服务将被初始化并附加到侦听器 [1]。
在默认模块 (main.bal
) 中添加 import question_management.question as _;
将导致 question_management.question
中的服务附加到侦听器,调用 /questions/allQuestions
应该会按预期工作.
我有以下文件结构:
│ Ballerina.toml
│ main.bal
│
├───modules
│ ├───http_listener
│ │ http_listener.bal
│ │
│ └───question
│ │ .gitignore
│ │ question.bal
│ │ service.bal
│ │
│ └───tests
│ question_test.bal
│ service_test.bal
│
│
└───tests
在main.bal
中包含以下服务:
import question_management.http_listener;
service / on http_listener:QuestionManagementListener {
resource function get status() returns string {
return "UP";
}
}
http_listener只是一个听众:
import ballerina/http;
public listener http:Listener QuestionManagementListener = new(9095);
我面临的问题是 question/service.bal
中定义的服务未提供流量。服务定义如下:
import question_management.http_listener;
service /questions on http_listener:QuestionManagementListener {
resource function get allQuestions() returns string {
Question|error q = new Question("Test", ["1", "2", "3", "4", "5"]);
json[] qarray = [];
if(!(q is error)) { qarray.push(q.toJson()); }
return qarray.toJsonString();
}
}
然而,当我启动程序时,只有 /status
端点按预期响应。这
questions/allQuestions
正在响应 404
no matching resource found for path : /questions/allQuestions , method : GET
如果我将服务从 question/service.bal
移动到 main.bal
,/questions/allQuestions
将开始正常工作。但是,如果可能的话,我希望将我的服务定义放入它们自己的模块中。
要初始化的模块需要在程序中直接或间接导入。这也适用于同一包中的模块。由于 question_management.question
未直接导入到默认模块或由默认模块导入的模块中,因此 question_management.question
中的服务未初始化或附加到侦听器,这就是观察到此错误的原因.
可以使用导入前缀 _
导入模块以将其包含在程序中,而无需使用其中的符号。这将导致模块被初始化,然后服务将被初始化并附加到侦听器 [1]。
在默认模块 (main.bal
) 中添加 import question_management.question as _;
将导致 question_management.question
中的服务附加到侦听器,调用 /questions/allQuestions
应该会按预期工作.