2015-02-11 159 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); 
    } 
}