【问题标题】:Fresh eyes needed with Apigee API and Node.jsApigee API 和 Node.js 需要新鲜的眼光
【发布时间】:2014-08-22 12:03:23
【问题描述】:

我刚刚开始通过 API 管理工具构建我的第一个 API,我遇到了一些问题,希望您能帮助我。

我的主要目标是通过创建对链接到我已上传的外部 Javascript 文件的 API 的调用,使该 API 与我的移动应用程序和 Usergrid BAAS 一起使用。到目前为止,我的经验是我的代码在我尝试的第一天就可以运行,但是第二天就开始破坏完全相同的代码,这非常令人困惑。

PS- 我将 RemoteController.js 文件作为 Node 类型上传

这是我非常简单的代码,希望您能帮助我找出导致错误的问题

测试链接:

http://jerryhamby-test.apigee.net/vdex-baas/hello

http://jerryhamby-test.apigee.net/vdex-baas/helloworld

============= 我的 server-usergrid.js 代码 ===========

var argo = require('argo');
var express = require('express');
var usergrid = require('usergrid');
var fs = require('fs');
fs.readFileSync('./RemoteController.js','utf8');

var app = express();
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(app.router);

var proxy = argo()
    .target('https://api.usergrid.com')
    .build();

app.get('/hello', function(req, res) {
    res.send('Hello from Express2');
});


app.get('/helloworld', function(req, res) {
  res.setHeader("Access-Control-Allow-Origin","*");
  RemoteController.helloWorld(req, res);
});

app.all('*', proxy.run);
app.listen(3000);

============= 我的 RemoteController.js 代码 ===========

function RemoteController() {
}

var client = new usergrid.client({
    orgName:'myOrg',
    appName:'sandbox',
    logging: true, //optional - turn on logging, off by default
    buildCurl: true
});

// test of helloworld
RemoteController.helloWorld = function(req, res) { 
        res.send('RemoteController inside helloWorld');
};

=============调用RemoteController.helloWorld时遇到的错误===========

at /organizations/jerryhamby/environments/test/apis/vDex-BaaS/server-usergrid.js:35
(anonymous) at /node_modules/express/lib/router/index.js:164 (callbacks) at  
/node_modules/express/lib/router/index.js:138 (param) at
/node_modules/express/lib/router/index.js:145 (pass) at
/node_modules/express/lib/router/index.js:90 (anonymous) at
/node_modules/express/lib/router/index.js:33 (router) at
/node_modules/express/node_modules/connect/lib/proto.js:193 (next) at
/organizations/grangaswamy/environments/test/apis/apigee-aws/node_modules/express/node_modules/connect/lib/middleware/multipart.js:97 (multipart) at
/organizations/grangaswamy/environments/test/apis/apigee-aws/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:64 (anonymous) at 
/node_modules/express/node_modules/connect/lib/middleware/urlencoded.js:41 (urlencoded) at 
/organizations/grangaswamy/environments/test/apis/apigee-aws/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:62 (anonymous) at 
/node_modules/express/node_modules/connect/lib/middleware/json.js:42 (json) at 
/organizations/grangaswamy/environments/test/apis/apigee-aws/node_modules/express/node_modules/connect/lib/middleware/bodyParser.js:60 (bodyParser) at 
/node_modules/express/node_modules/connect/lib/proto.js:193 (next) at 
/node_modules/express/node_modules/connect/lib/middleware/logger.js:158 (logger) at 
/node_modules/express/node_modules/connect/lib/proto.js:193 (next) at 
/node_modules/express/lib/middleware.js:30 (expressInit) at 
/node_modules/express/node_modules/connect/lib/proto.js:193 (next) at 
/node_modules/express/node_modules/connect/lib/middleware/query.js:45 (query) at 
/node_modules/express/node_modules/connect/lib/proto.js:193 (next) at 
/node_modules/express/node_modules/connect/lib/proto.js:201 (anonymous) at 
/node_modules/express/node_modules/connect/lib/connect.js:65 (app) at 
/Users/Apigee/src/noderunner/target/checkout/node10/node10src/src/main/javascript/io/apigee/trireme/node10/node/events.js:98 (anonymous) at 
/Users/Apigee/src/noderunner/target/checkout/node10/node10src/src/main/javascript/io/apigee/trireme/node10/trireme/adaptorhttp.js:509 (anonymous) at 
/Users/Apigee/src/noderunner/target/checkout/node10/node10src/src/main/javascript/io/apigee/trireme/node10/node/domain.js:183 (anonymous) at 
/Users/Apigee/src/noderunner/target/checkout/node10/node10src/src/main/javascript/io/apigee/trireme/node10/node/domain.js:123 (anonymous) at 
/Users/Apigee/src/noderunner/target/checkout/node10/node10src/src/main/javascript/io/apigee/trireme/node10/trireme/adaptorhttp.js:508 (anonymous) at 
/Users/Apigee/src/noderunner/target/checkout/node10/node10src/src/main/javascript/io/apigee/trireme/node10/trireme/adaptorhttp.js:578 (anonymous)

【问题讨论】:

  • 有什么理由使用 fs.readFileSync 而不是 var RemoteController = require('./RemoteController');
  • 您是否在 node_modules 包中使用 Express 进行部署?确保您已安装 3.4.8 或更早版本 (npm install express@3.4.8),否则 Express 会因 Edge 平台上的版本冲突而崩溃。
  • 我在 Node.js 上很简单,以至于我不知道您的 require 建议。我只是在网上搜索并尝试我找到的代码。任何好的链接都会有很大的帮助。将测试您的建议,看看会发生什么。
  • 对于@generalhenry 的观点,您应该使用 module.exports 而不是通过 FRS 包含
  • package.json 是:{ "name":"usergrid-node", "version":"0.0.0", "description":"Usergrid 代理", "main":"server- usergrid.js", "dependencies": { "express":"3.xx", "usergrid":"xxx", "argo":"xxx" } }

标签: node.js api apigee


【解决方案1】:

每个节点模块(文件 ~= 模块)都有自己的上下文。您可以从该上下文中导出变量并将它们要求到您的上下文中。

试试这个:

============= 我的 server-usergrid.js 代码 ===========

var argo = require('argo');
var express = require('express');
var RemoteController = require('./RemoteController');

var app = express();
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(app.router);

var proxy = argo()
    .target('https://api.usergrid.com')
    .build();

app.get('/hello', function(req, res) {
    res.send('Hello from Express2');
});


app.get('/helloworld', function(req, res) {
  res.setHeader("Access-Control-Allow-Origin","*");
  RemoteController.helloWorld(req, res);
});

app.all('*', proxy.run);
app.listen(3000);

============= 我的 RemoteController.js 代码 ===========

var usergrid = require('usergrid');

function RemoteController() {
}

var client = new usergrid.client({
    orgName:'myOrg',
    appName:'sandbox',
    logging: true, //optional - turn on logging, off by default
    buildCurl: true
});

// test of helloworld
RemoteController.helloWorld = function(req, res) { 
        res.send('RemoteController inside helloWorld');
};

module.exports = RemoteController;

【讨论】:

  • BINGO 我们赢了!谢谢@generalhenry,你为我省了很多麻烦,现在我只需要研究模块来理解为什么会这样。
  • 你可以认为每个模块都是它自己的函数,返回 module.exports
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多