/** version=0.9 后端接口标准模板 标准流程 (Ctrl+f 搜索 "-->" 之后的关键字,就能找到相应的代码) * 确定需要获取这些数据的函数模板 --> wiki 待补 * 画出代码逻辑的流程图 --> 自己的帖子号 #xxxx * 按照将找到的函数模板分别填充到所涉及到的关键点上 常用功能 api文档 http://www.wware.org/api/server.html 模板指引 http://glue.spolo.org/trac/glue/wiki/wware/BE/be-basetpl */ sp.exports = (function() { // DEBUG模式,错误信息直接抛到前端,方便调试 var DEBUG = /*INSBEGIN:DEBUG*/ true /*INSEND:DEBUG*/ , formHandle = /*INSBEGIN:FORM*/ false /*INSEND:FORM*/ ; var url_parameter_constraints = /*INSBEGIN:URLPM*/ {} /*INSEND:URLPM*/ ; var form_parameter_constraints = /*INSBEGIN:FORMPM*/ {} /*INSEND:FORMPM*/ ; function prepare(req, res) { var tmp_data = {}; return when.pipeline([ /*INSBEGIN:PREPROCESS*/ /*INSEND:PREPROCESS*/ function() { //通常,这里从tmp_data中获取文件路径的结果。并赋值给form_parameter_constraints[XXX].targetfile。其中XXX是相应的的输入变量的名称。 } ]); } /** public_data 如果是后端组装页面,请编辑这个函数*/ function getPublicData(req, res, data) { /* 任何需要返回给客户端的信息务必追加到这个对象上 */ var finish_data = {}; /* tmp_data的作用在于多个代码块之间互相传值 */ var tmp_data = {}; /* 所有输入参数一旦被验证通过了,接下来就可以通过 inputs这个对象来来获取: inputs.key */ var inputs = req.params.param || {}; return when.pipeline([ /*INSBEGIN:PUBDATA*/ /*INSEND:PUBDATA*/ function() { /*INSBEGIN:MARKDESC { } INSEND:MARKDESC*/ var default_data = /*INSBEGIN:MARK*/ {} /*INSEND:MARK*/ ; return _.extend(default_data, finish_data); } ]); } //user_data 如果是获取user相关数据,请编辑这个函数 function getUserData(req, res, data) { /* 任何需要返回给客户端的信息务必追加到这个对象上 */ var finish_data = {}; /* tmp_data的作用在于多个代码块之间互相传值 */ var tmp_data = {}; /* 所有输入参数一旦被验证通过了,接下来就可以通过 inputs这个对象来来获取: inputs.key */ var inputs = req.params.param || {}; return when.pipeline([ /*INSBEGIN:PRIVATEDATA*/ /*INSEND:PRIVATEDATA*/ function() { /*INSBEGIN:USERMARKDESC { } INSEND:USERMARKDESC*/ var default_data = /*INSBEGIN:USERMARK*/ {} /*INSEND:USERMARK*/ ; return _.extend(default_data, finish_data); } ]); } function fileUploadHandler(req, res, ctx) { try { return reqprocessor.fileUploadHandler(req, res, ctx, form_parameter_constraints); } catch (err) { if (DEBUG) { err.status = 200; } throw err; } } /** !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!以下内容为系统自动生成,请不要做任何修改!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/ var render = {}; // 模板经过编译之后,_ViewName保存了基础的view的名称(也就是文件名部分)。而dotjsFunc保存了主View(not resposive portion)的dotjs函数。 var _ViewName; /***DOTJSFUNC***/ function _checker(req, res, param, constr) { var promise = when.promise(function(resolve, reject, notify) { var validateret = validate(param, constr); if (validateret) { validateret.success = false; reject(validateret); } resolve(param); }); return promise; } function doPrepare(req, res) { return when.sequence([ function(req, res) { if (formHandle) { req._uploadHandler = fileUploadHandler; } if (!_.isEmpty(url_parameter_constraints)) { var url_constraints = {}; for (var key in url_parameter_constraints) { if (!_.isEmpty(url_parameter_constraints[key].constraints)) { url_constraints[key] = url_parameter_constraints[key].constraints; } } if (!_.isEmpty(url_constraints)) { return _checker(req, res, req.params.param, url_constraints); } } }, prepare, ], req, res).catch(function(err) { var err_ret = util.inspect(err); if (DEBUG) { res.writeJSONP(err_ret); } throw err_ret; }); } function process(req, res) { var option = { "req": req, "res": res, "DEBUG": DEBUG, "formHandle": formHandle, "_ViewName": _ViewName, "getPublicData": getPublicData, "getUserData": getUserData, "render": render, "checker": _checker, "constraints": form_parameter_constraints }; return reqprocessor.processHandler(option); } formHandle = !_.isEmpty(form_parameter_constraints); return /*INSPOINTBEGIN:MIDDLEDEP*/ [doPrepare, "bodyparser", process] /*INSPOINTEND:MIDDLEDEP*/ ; })();