我是yeoman的角度全栈的新手,似乎错误地构造了我的服务器api回调。我已经破解了一些代码。我知道这是错的,但我已经碰壁了 - 任何建议都会受到赞赏:
例如,如果我做一个简单的win32ole iTunes com调用并返回一个文件路径:
在client / app / main.controller.js中进行GET调用
$http.get('/api/iTunes/getxmlpath').success(function(path) {
$scope.myfilepath = path;
});
路由设置在server / api / iTunes / index.js
中router.get('/getxmlpath', controller.getxmlpath);
server / api / iTunes / iTunes.controller.js的相关部分
exports.getxmlpath = function(req, res) {
getWin32OlePath(serviceCallback);
};
function getWin32OlePath() {
try {
var win32ole = require('win32ole');
var iTunesApp = win32ole.client.Dispatch('iTunes.Application');
var xmlpath = iTunesApp.LibraryXMLPath();
console.log('got itunes xml path: '+xmlpath);
return res.json(200, xmlpath);
} catch (err) {
return handleError(res, err);
}
}
/********
error handle the callbacks
**********/
var serviceCallback =
function(response){
return function(err, obj){
if(err) {
response.send(500);
} else {
response.send(obj);
}
}
}
grunt服务器失败
Error: Route.get() requires callback functions but got a [object Undefined]
答案 0 :(得分:0)
从我看来,上面的代码可能有几个问题。
我将使用小写作为文件名和控制器,因此itunes
代替iTunes
:
您是否在server / routes.js中定义了路由和控制器?
app.use('/api/itunes', require('./api/itunes'));
在server / itunes / itunes.controller.js中,您丢失了响应对象res
的范围,您可以相应地更改代码:
exports.getxmlpath = function(req, res) {
var xmlpath = getWin32OlePath(serviceCallback);
return res.json(200, xmlpath);
};
function getWin32OlePath() {
var xmlpath = ''; // what ever you are doing here
// do the things you need to do in your function
return xmlpath;
}
您的server / itunes / index.js是否完整?
'use strict';
var express = require('express');
var controller = require('./itunes.controller');
var router = express.Router();
router.get('/getxmlpath', controller.getxmlpath);
module.exports = router;
另一个提示:使用yeoman轻松创建工作端点,您可以使用终端中的生成器:
yo angular-fullstack:endpoint itunes
更多内容在angular.fullstack文档中进行了解释:https://github.com/DaftMonk/generator-angular-fullstack