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)目录下的文件进行监控,并且自动加载。

  • 相关阅读:
    【12】python模块:itsdangerous(生成临时身份令牌)
    python作业/练习/实战:下载QQ群所有人的头像
    【4】Python操作redis
    【7】Python网络请求:requests模块
    【6】Python网络请求:urllib模块
    python学习笔记:目录结构
    【9】Python接口开发:flask Demo实例
    【8】Python接口开发:PythonWEB框架之Flask
    前端学习笔记——引入css文件、样式优先级
    Yii2模型介绍
  • 原文地址:https://www.cnblogs.com/mmjx/p/2287212.html
Copyright © 2011-2022 走看看