学习micro过程中,请求api返回失败 500 和 400

waschild1012 · 2019-06-12 14:39:25 · 1528 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2019-06-12 14:39:25 的主题,其中的信息可能已经有所发展或是发生改变。

在使用micro的时候,使用给的例子greeter,服务启动后,再使用http访问发送请求,报错的

请求无参数返回报错

curl -XPOST -H 'Content-Type: application/json' -d '{}' http://localhost:8080/greeter/say/hello
{"id":"go.micro.api.greeter","code":400,"detail":"Name cannot be blank","status":"Bad Request"}

请求有参数返回报错

curl -XPOST -H 'Content-Type: application/json' -d '{"name": "John"}' http://localhost:8080/greeter/say/hello
{"id":"go.micro.api","code":500,"detail":"error during request: unknown field \"name\" in go_micro_api.Request","status":"Internal Server Error"}

网上找了很多,没有找到答 小白求解答

开启的服务 WechatIMG9021.png

greeter.api源码

package main

import (
    "encoding/json"
    "log"
    "strings"

    hello "github.com/micro/examples/greeter/srv/proto/hello"
    "github.com/micro/go-micro"
    "github.com/micro/go-micro/errors"
    api "github.com/micro/micro/api/proto"
    "context"
)
type Say struct {
    Client hello.SayService
}
func (s *Say) Hello(ctx context.Context, req *api.Request, rsp *api.Response) error {
    log.Print("Received Say.Hello API request")
    name, ok := req.Get["name"]
    if !ok || len(name.Values) == 0 {
        return errors.BadRequest("go.micro.api.greeter", "Name cannot be blank")
    }

    response, err := s.Client.Hello(ctx, &hello.Request{
        Name: strings.Join(name.Values, " "),
    })
    if err != nil {
        return err
    }

    rsp.StatusCode = 200
    b, _ := json.Marshal(map[string]string{
        "message": response.Msg,
    })
    rsp.Body = string(b)
    return nil
}

func main() {
    service := micro.NewService(
        micro.Name("go.micro.api.greeter"),
    )

    // parse command line flags
    service.Init()

    service.Server().Handle(
        service.Server().NewHandler(
            &Say{Client: hello.NewSayService("go.micro.srv.greeter", service.Client())},
        ),
    )

    if err := service.Run(); err != nil {
        log.Fatal(err)
    }
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1528 次点击  
加入收藏 微博
2 回复  |  直到 2019-10-10 17:00:37
waschild1012
waschild1012 · #1 · 6年之前

找到原因了 我先是尝试 micro api --namespace=go.micro.srv 进行启动,可以正常请求 后来发现极有可能是因为handler配置的问题 于是按照micro api --handler=api,启动micro api 请求就正常了 aaaa.png

yangxuan0261
yangxuan0261 · #2 · 6年之前

启动api是要指定参数 --handler=api

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传