2015-02-11 27 views
1

我是sails.js的新手,我有一個簡單的藍圖模型設置。現在,我的控制器和模型幾乎是空的,除了模型上的屬性定義。模型的sails.js藍圖中的自定義XML響應?

通過POST創建模型後,我希望該響應是自定義XML響應(我生成的一些純文本),而不是標準的JSON響應。我想我可以覆蓋控制器上的整個創建方法,本質上是複製和粘貼默認代碼並覆蓋響應,但這看起來真的很重。

必須有更好的方法來做到這一點?

請注意,我只是試圖爲這個特定的模型,而不是一般。

謝謝!

+0

這取決於您的應用程序的設置方式。它純粹和API?你有任何查看文件?什麼是請求信息,另一臺服務器或基於瀏覽器的客戶端?這個創建控制器現在駐留在哪裏(它是否在藍圖中?如果是這樣,你需要pubsub/sockets嗎?)它僅僅用於創建模型還是用於模型上的所有操作? – Meeker 2015-02-12 15:29:05

回答

1

如果您的結果是爲了在單一模型上對所有操作執行此操作,您可以簡單地覆蓋toJSON方法以在模型本身中生成XML而不是JSON。然後,如果你正在運行的藍圖,當你點擊這些端點時,它會吐出XML而不是json。

但是,您的問題是特定於創建操作。在這種情況下,我會問你是否運行了非Ajax請求的替代視圖文件。如果沒有,只需將視圖文件放入使用xml佈局的views/foo/create [ejs,jade等]創建操作中即可。該響應將會看到該視圖文件並使用該文件覆蓋json輸出。這意味着您必須更改任何代碼才能添加該單個文件。

他們有十幾種方法來完成這個任務,並且您的問題需要更多的細節(如評論中提到的),以便針對您的用例的特定答案。

2

要更改特定響應的標題。

response.setHeader("Content-type", "text/xml");

當你已經有一些XML的response.send()

2

最好的辦法是簡單地添加標題爲DigitalDesignDj提及。

/** 
* TestController 
*/ 
module.exports = { 
    create: function(res, req) { 
     // get your data 
     var xml = 'some xml string'; 

     res.setHeader("Content-type", "text/xml"); 
     res.send(xml); 
    } 
}