您的位置:首页 > Web前端 > Node.js

Node.js与Sails~自定义响应体responses

2015-10-14 11:03 507 查看
回到目录

在Node.js里,你可以控制请求和响应,自己可以定义自己的响应方式,如对文本如何响应,对json如何响应,对图像流如何响应等等,而这些在Sails架构里,变得更加容易和清晰了,它位于项目的api/responses目录下,你可以定义自己的响应体。

其实sails为我们封装了一些标准的相应,如view方法,这也就是一种响应体,它可以将文本,json对象渲染到指定的视图上,而我们自己可以效仿它,实现自己的响应体,下面代码是官方给出的一个实例,它的方法名为myResponse,这是sails架构一个定义类模块的方式,即JS文件名不是你的类名,我们在程序里可以通过res.myResponse("你的响应内容")去调用它,具体代码如下

/**
* api/responses/myResponse.js
*
* This will be available in controllers as res.myResponse('foo');
*/

module.exports = function(message) {

var req = this.req;
var res = this.res;

var viewFilePath = 'mySpecialView';
var statusCode = 200;

var result = {
status: statusCode
};

// Optional message
if (message) {
result.message = message;
}

// If the user-agent wants a JSON response, send json
if (req.wantsJSON) {
return res.json(result, result.status);
}

// Set status code and view locals
res.status(result.status);
for (var key in result) {
res.locals[key] = result[key];
}
// And render view
res.render(viewFilePath, result, function (err) {
// If the view doesn't exist, or an error occured, send json
if (err) {
return res.json(result, result.status);
}

// Otherwise, serve the `views/mySpecialView.*` page
res.render(viewFilePath);
});
};


它实现了普通文件和json对象的两种响应方式,我们在代码里调用它和view类是一样的

module.exports={
index: function (req, res){
return res.view({title:"大叔",engTitle:"Lind"});
//return res.view("view_name",data)//view_name参数为空表示用当前的action
},
err:function(req,res){
return res.myResponse({errCode:0,error:"产生错误"});
}

};


通过执行http://localhost:1337/test/err得到下面的结果



上面的功能类似于c# mvc里的重写ViewResult,都是对输出响应流进行控制的。

回到目录
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: