MeanJs:如何 POST 数据?为什么服务操作不触发?
MeanJs: How to POST data? Why the service actions does not triggering?
我是 angular 的新手,MeanJs 需要帮助。我做错了什么,如何 post 数据并得到答案?
我想执行 Complile 函数并将代码从文本框传递到服务器并对其进行处理并获得答案。
但是如何在lab.client.service.js或其他文件中编写代码?
因为我没有得到从文件 [3] 开始执行代码的任何信息。
我使用 https://www.youtube.com/watch?v=DOqLbJTvCv8&feature=youtu.be 教程编写了这段代码。
文件
lab.client.view.html 我有文本框绑定到 data.code angular 对象
<textarea ng-model="data.code"></textarea>
并且在 :
中有两个带触发功能的按钮
<div style="margin:12px;">
<button type="button" class="btn btn-primary" ng-click="LabController.compile()">Compile</button>
<button type="button" class="btn btn-primary" ng-click="LabController.compileAndUpload()">Cimpile & Upload</button>
</div>
lab.client.controller.js
'use strict';
angular.module('core').controller('LabController', ['$scope', 'Lab',
function($scope, Lab) {
$scope.data = {
code: ''
};
this.compile = function() {
console.log('User clicked compile', $scope.data.code); //This message is printed in browser console.
$scope.message = Lab.compile //But this action does not executes???
};
this.compileAndUpload = function() {
console.log('User clicked compileAndUpload', $scope.data.code); //This message is printed in browser console.
$scope.message = Lab.compileAndUpload; //But this action does not executes???
};
}
]);
lab.client.service.js
'use strict';
angular.module('core').factory('Lab', ['$resource', function($resource) {
console.info("client.service: Veikia!");
return $resource('lab', {
compile: { //I do not see that there URL were triggered
method: 'POST',
url: '/lab/compile'
},
compileAndUpload: { //I do not see that there URL were triggered
method: 'POST',
url: '/lab/compileAndUpload',
}
});
}
]);
lab.server.routes.js
'use strict';
module.exports = function(app) {
var lab = require('../../app/controllers/lab.server.controller');
// Lab Routes
app.route('/lab/compile')
.post(lab.compile);
app.route('/lab/compileAndUpload')
.post(lab.compileAndUpload);
};
lab.server.controller.js
'use strict';
var mongoose = require('mongoose'),
_ = require('lodash');
var response = {
'message' : 'It works'
};
exports.compile = function(req, res) {
var code = req.body.data.code;
res.jsonp(response);
};
exports.compileAndUpload = function(req, res) {
var code = req.body.data.code;
res.jsonp(response);
};
您的代码有两个问题:
自定义资源操作定义不正确。参见argument list。第二个参数用于默认参数:
return $resource('lab', {}, { // <-- 3rd argument
compile: {
method: 'POST',
url: '/lab/compile'
},
compileAndUpload: {
method: 'POST',
url: '/lab/compileAndUpload',
}
});
在 $scope.message = Lab.compile
中,您正在分配操作而不是调用它:
this.compile = function() {
console.log('User clicked compile', $scope.data.code); //This message is printed in browser console.
$scope.message = Lab.compile() // <-- invoke
};
this.compileAndUpload = function() {
console.log('User clicked compileAndUpload', $scope.data.code); //This message is printed in browser console.
$scope.message = Lab.compileAndUpload();
};
我是 angular 的新手,MeanJs 需要帮助。我做错了什么,如何 post 数据并得到答案?
我想执行 Complile 函数并将代码从文本框传递到服务器并对其进行处理并获得答案。
但是如何在lab.client.service.js或其他文件中编写代码?
因为我没有得到从文件 [3] 开始执行代码的任何信息。
我使用 https://www.youtube.com/watch?v=DOqLbJTvCv8&feature=youtu.be 教程编写了这段代码。
文件
lab.client.view.html 我有文本框绑定到 data.code angular 对象
<textarea ng-model="data.code"></textarea>
并且在 :
中有两个带触发功能的按钮<div style="margin:12px;">
<button type="button" class="btn btn-primary" ng-click="LabController.compile()">Compile</button>
<button type="button" class="btn btn-primary" ng-click="LabController.compileAndUpload()">Cimpile & Upload</button>
</div>
lab.client.controller.js
'use strict'; angular.module('core').controller('LabController', ['$scope', 'Lab', function($scope, Lab) { $scope.data = { code: '' }; this.compile = function() { console.log('User clicked compile', $scope.data.code); //This message is printed in browser console. $scope.message = Lab.compile //But this action does not executes??? }; this.compileAndUpload = function() { console.log('User clicked compileAndUpload', $scope.data.code); //This message is printed in browser console. $scope.message = Lab.compileAndUpload; //But this action does not executes??? }; } ]);
lab.client.service.js
'use strict'; angular.module('core').factory('Lab', ['$resource', function($resource) { console.info("client.service: Veikia!"); return $resource('lab', { compile: { //I do not see that there URL were triggered method: 'POST', url: '/lab/compile' }, compileAndUpload: { //I do not see that there URL were triggered method: 'POST', url: '/lab/compileAndUpload', } }); } ]);
lab.server.routes.js
'use strict'; module.exports = function(app) { var lab = require('../../app/controllers/lab.server.controller'); // Lab Routes app.route('/lab/compile') .post(lab.compile); app.route('/lab/compileAndUpload') .post(lab.compileAndUpload); };
lab.server.controller.js
'use strict'; var mongoose = require('mongoose'), _ = require('lodash'); var response = { 'message' : 'It works' }; exports.compile = function(req, res) { var code = req.body.data.code; res.jsonp(response); }; exports.compileAndUpload = function(req, res) { var code = req.body.data.code; res.jsonp(response); };
您的代码有两个问题:
自定义资源操作定义不正确。参见argument list。第二个参数用于默认参数:
return $resource('lab', {}, { // <-- 3rd argument compile: { method: 'POST', url: '/lab/compile' }, compileAndUpload: { method: 'POST', url: '/lab/compileAndUpload', } });
在
$scope.message = Lab.compile
中,您正在分配操作而不是调用它:this.compile = function() { console.log('User clicked compile', $scope.data.code); //This message is printed in browser console. $scope.message = Lab.compile() // <-- invoke }; this.compileAndUpload = function() { console.log('User clicked compileAndUpload', $scope.data.code); //This message is printed in browser console. $scope.message = Lab.compileAndUpload(); };