You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lack中间件包装Ningle应用后添加路由报错的技术问询

解决Ningle/Lack添加中间件后无法动态修改路由的问题

问题根源

Lack的lack:builder返回的是一个Lack应用函数,而非原始的Ningle app实例。当你用setf *app*把包装后的函数覆盖原Ningle实例后,*app*的类型从ningle:app变为函数,调用(setf n:route)时,通用函数找不到针对函数类型的方法,就会抛出「No applicable method」错误。

解决方案

核心思路是保留原始Ningle实例的独立引用,不要用中间件包装后的函数覆盖它。具体操作:

  1. 单独存储原始Ningle app实例:
(defvar *ningle-app* (make-instance 'n:app))
  1. 用新变量存储包装中间件后的应用函数:
(defparameter *application-root* (asdf:system-source-directory :my-project))
(defparameter *static-directory* (merge-pathnames #P"static/" *application-root*))

(defvar *app*
  (lack:builder
   (:static
    :path (lambda (path)
            (if (ppcre:scan "^(?:/images/|/css/|/js/|/robot\\.txt$|/favicon\\.$)" path)
                path
                nil))
    :root *static-directory*)
   :backtrace
   :session
   (lambda (app)
     (lambda (env)
       (funcall app env)))
   *ningle-app*))
  1. 后续新增/修改路由时,操作原始的*ningle-app*:
(setf (n:route *ningle-app* "agents/:id/endpoint" :method :post)
      #'(lambda (params)
          (route-fun params)))

效果验证

修改后,即便中间件已包装完成,你仍可随时调整*ningle-app*的路由,无需重启Lisp会话,变更会实时生效。若需调整中间件配置,只需重新运行lack:builder将*ningle-app*重新包装,再赋值给*app*即可。

内容的提问来源于stack exchange,提问作者mooseface

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 07:42:11