【发布时间】: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" } }