2

背景:我是一個法國開發人員,在一個團隊中開發基於JHipster的衆籌平臺。JHipster中的服務器/客戶端路由與Thymeleaf和Angular

在JHipster中,當訪問http://domain.com/unknown時,檢索到的頁面是服務器端的錯誤頁面。

我想知道的是: - thymeleaf如何知道它必須返回error.html? - 在哪裏來自參數以及它們是如何,尤其是像變量

<span th:text="${error}"> 

- >哪裏來自(相同的狀態和消息)來錯誤?某處是否有某種服務器端控制器?

另一個問題是一個必然結果:爲什麼jhipster,一個客戶端和一個服務器中有2個錯誤頁面?不應該只有一個客戶端頁面作爲JHipster用於SPA。 爲什麼服務器不總是發回index.html,讓客戶端測試是否存在錯誤?

最後一個問題也是一個必然結論:是否有一些方法可以在客戶端(角度)路由(在app.js文件中)請求動態服務器端(thymeleaf)模板。這對開發豐富的SPA非常有用。

PS:感謝您朱利安爲您的工作

回答

7

我想知道什麼: - thymeleaf怎麼知道它返回的error.html?

兩部分。首先,Spring被配置爲在所有服務器端視圖中使用Thymeleaf。在JHipster,應用程序註釋是這樣的:

@ComponentScan 
@EnableAutoConfiguration(exclude = {MetricFilterAutoConfiguration.class, MetricRepositoryAutoConfiguration.class}) 
public class Application { 

@EnableAutoConfiguration的關鍵在於理解Thymeleaf是如何設置。它觸發ThymeleafAutoConfiguration創建Thymeleaf視圖解析器和什麼。請注意,JHipster有一個ThymeleafConfiguration類,但這僅用於電子郵件,並且與您的問題無關。

第二部分... Spring Boot使用「/ error」作爲默認錯誤視圖。從the docs

春天開機默認提供的/錯誤映射,處理在一個合理的方式,所有 錯誤,並已被註冊爲在servlet容器中的「全球性」的錯誤 頁。對於機器客戶端,它將生成一個 JSON響應,其中包含錯誤,HTTP狀態和異常消息的詳細信息。對於瀏覽器客戶端,有一個'whitelabel'錯誤 視圖呈現HTML格式的相同數據(要自定義它,只需添加一個視圖,解析爲'錯誤')。

解析錯誤視圖時,Spring會爲您正在使用的視圖解析器添加正確的後綴(我描述的第一部分)。例如,Thymleaf的.html,Velocity的.vm或Freemarker的.ftl。

某處是否有某種服務器端控制器?

是的。 JHipster也在使用Spring Boot Actuator。退房this section of the docs。感興趣的主要類別是ErrorMvcAutoConfiguration。具體來說這部分:

@Bean 
@ConditionalOnMissingBean(value = ErrorAttributes.class, search = SearchStrategy.CURRENT) 
public DefaultErrorAttributes errorAttributes() { 
    return new DefaultErrorAttributes(); 
} 

@Bean 
@ConditionalOnMissingBean(value = ErrorController.class, search = SearchStrategy.CURRENT) 
public BasicErrorController basicErrorController(ErrorAttributes errorAttributes) { 
    return new BasicErrorController(errorAttributes); 
} 

哪裏來從(同一狀態和消息)錯誤?

見我上面剛剛提到的,然後看看在DefaultErrorAttributes代碼:

Map<String, Object> errorAttributes = new LinkedHashMap<String, Object>(); 
errorAttributes.put("timestamp", new Date()); 
// and so on... 

另一個問題是一個推論:爲什麼會出現2個錯誤頁面中 jhipster,一個客戶端和一個服務器?由於JHipster用於SPA,因此不應該只有一個 客戶端頁面。爲什麼服務器 總是發回index.html,讓客戶端測試是否存在 錯誤?

需要有一個服務器端錯誤處理程序。並非所有的東西都會映射到角度路線。例如,www.yoursite.com/doesnt_exist會導致瀏覽器向服務器發出另一個請求。

最後一個問題是一個推論太:是有一些方法要求在客戶端(角) 路由 動態服務器端(thymeleaf)模板(在app.js文件)。這對於開發豐富的SPA有很大的幫助。

是的。你可以在app.js中爲templateUrl指定一個JS函數。