zoukankan      html  css  js  c++  java
  • Clojure Web 开发一些注意事项

    1. 使用Compojure开发的Web Server,怎么样绑定其端口?

    现有的Clojure开发环境大致有2种,一种是Emacs下的开发,一种是ERPL下。Compojure可以利用lein和ring的结合,做到自动reload修改过的文件而不用重启服务器,因此大部分时候我们都使用lein ring server来启动我们的服务器,然而这种做法并没有提供绑定端口的方式,如果需要绑定到给定的端口,特别是1~1024这些需要特别权限的端口,我们需要使用别的方法。比如使用ring.util.serve方法:

    :dev-dependencies [[ring-serve "0.1.0"]]
    
    user> (require 'your-app.core/handler)
    nil
    user> (use 'ring.util.serve)
    nil
    user> (serve your-app.core/handler)
    Started web server on port 3000
    

      

    2. 不使用Compojure的hanler/site方法来包裹routes会出现什么后果。

    handler/site方法自动会给用户定义的route添加如下middleware,如果不用handler/site方法,这些middleware将都不能起作用,奇怪的现象会出现。

        - wrap-session
        - wrap-flash
        - wrap-cookies
        - wrap-multipart-params
        - wrap-params
        - wrap-nested-params
        - wrap-keyword-params

    比如Destruct Params的时候会发现,:params, :query-params, 等都是空,只有query-string为请求的值。这个耽误了我很久的时间,做法很简单,加上handler/site方法包裹就可以了。

    3. 如何让你的web server不重启就应用新的修改?

    按照Compojure的官方文档所说,如果想默认的实现不重启web server就应用新的服务端代码的话,最好的办法就是用lein 和 ring的整合。ring中实现了对所有代码的自动重加载。不过事实上是大部分时候我们都不会使用这种方式来进行编程,因为lein的:ring参数后面并不能配置ssl链接,不能修改绑定端口等等。因此大部分时候我们是使用方法2的,也就是用ring.util.serve包在repl下运行我们的web server,并且实现一些交互。这样的话,我们就可以在core.clj中的main-routes定义中加入wrap-reload这个middleware来实现对:dir(默认是src)目录下的文件进行监控,并且自动加载。

  • 相关阅读:
    利用JBoss漏洞拿webshell方法
    jboss漏洞导致服务器中毒
    dubbo bug之 Please check registry access list (whitelist/blacklist)的分析与解决
    将list转为json字符串
    MySQL语句给字段值加1
    java int怎么转换为string
    HttpURLConnection如何添加请求头?
    eclipse下载egit插件,实现代码git同步问题
    eclipse编译项目用maven编译问题
    fastjson将java list转为json字符串
  • 原文地址:https://www.cnblogs.com/mmjx/p/2287212.html
Copyright © 2011-2022 走看看