构造角度fullstack api函数回调

时间:2015-03-04 23:55:01

标签: angularjs node.js angular-ui-router angular-fullstack

我是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]

1 个答案:

答案 0 :(得分:0)

从我看来,上面的代码可能有几个问题。 我将使用小写作为文件名和控制器,因此itunes代替iTunes

  1. 您是否在server / routes.js中定义了路由和控制器?

    app.use('/api/itunes', require('./api/itunes'));

  2. 在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;
    }
    
  3. 您的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;
    
  4. 另一个提示:使用yeoman轻松创建工作端点,您可以使用终端中的生成器:

    yo angular-fullstack:endpoint itunes

    更多内容在angular.fullstack文档中进行了解释:https://github.com/DaftMonk/generator-angular-fullstack