首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Racket调度规则

Racket调度规则
EN

Stack Overflow用户
提问于 2016-05-22 19:59:02
回答 1查看 423关注 0票数 4

我遵循官方的基于URL的分派,但似乎无法使它正确工作。

代码语言:javascript
运行
复制
#lang web-server/insta  
(require web-server/servlet
         web-server/servlet-env)

(define (start request)
  (blog-dispatch request))

(define-values (blog-dispatch blog-url)
  (dispatch-rules
   (("") list-posts)
   (("posts" (string-arg)) review-post)
   (else list-posts)))

(define (list-posts req) `(list-posts))
(define (review-post req p) `(review-post ,p))

(serve/servlet start
               #:servlet-path ""
               #:port 8080)

当我运行.rkt文件时,web服务器似乎工作正常。但是,当我实际点击主页面(http://localhost:8080/或其他什么)时,我会得到一个通用的“欢迎进入球拍”页面,而不是我在调度规则中指定的响应。如果我点击localhost:8080/post/test,就会发现我指定的页面丢失了一个错误。我是不是漏掉了什么明显的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-23 01:47:26

您的代码有一些问题,尽管并不是所有的问题都是您的错。web-server API有点奇怪,尤其是serve/servlet API。

首先,如果您想直接使用#lang web-server/insta API,就不应该使用serve/servlet。如果您想使用无状态servlet,或者对有状态servlet使用#lang web-server#lang racket/base,则使用#lang racket#lang racket/base。由于您的代码是当前编写的,它将使用start函数作为web-server/insta的入口点以及serve/servlet的调用,因此您将有效地启动一个web服务器两次。

第二,serve/servlet的工作方式有点混乱:默认情况下,它只捕获您用#:servlet-path指定的路径上的请求。我发现这通常不是我想要的,所以您希望提供#:servlet-regexp #rx""来允许servlet处理任何路径的请求。

最后,servlet函数本身不返回有效的响应。您可能希望返回某种类型的JSON或HTML。您需要构造一个响应结构并返回它,但是您可以很容易地使用像response/xexpr这样的助手函数。

通过所有这些更改,您的代码应该如下所示:

代码语言:javascript
运行
复制
#lang racket/base

(require web-server/servlet
         web-server/servlet-env)

(define (start request)
  (blog-dispatch request))

(define-values (blog-dispatch blog-url)
  (dispatch-rules
   (("") list-posts)
   (("posts" (string-arg)) review-post)
   (else list-posts)))

(define (list-posts req)
  (response/xexpr `(html (body "list-posts"))))
(define (review-post req p)
  (response/xexpr `(html (body (div "review-post: " ,p)))))

(serve/servlet start
               #:servlet-path "/"
               #:servlet-regexp #rx""
               #:port 8080)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37379042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档