Bluemix - Cloudant node.js:调用API

时间:2016-11-18 09:44:37

标签: javascript node.js ibm-cloud cloudant

我有一个node.js应用程序来调用API。 API在第一次调用时运行良好,但在第二次调用时,它会返回以下错误消息:

404 Not Found: Requested route ('abc.mybluemix.net') does not exist.

请帮助查看app.js功能:

app.js
    app.get('/abc/:provider_id/staffs', function(request, response) {

        console.log("Get method invoked.. ")

        db = cloudant.use(dbCredentials.dbStaff);
        //db = cloudant.use("staffs");
        var docList = [];
        db.list(function(err, body) {
            if (!err) {
                var len = body.rows.length;
                console.log('total # of docs -> '+len);
                if(len == 0) {
                    // error
                } else {
                    var i = 0;
                    body.rows.forEach(function(document) {
                        db.search('allstaff', 'allstaff_index', {q:"provider_id:"+request.params.provider_id}, function(err, doc) {
                            if (!err) {
                                if(doc['_attachments']) {
                                    // todo
                                } else {
                                    var responseDataStaff    = createResponseDataStaffs(
                                                                            doc.rows[i].fields.id,
                                                                            doc.rows[i].fields.provider_id,
                                                                                doc.rows[i].fields.firstname,
                                                                                doc.rows[i].fields.lastname,
                                                                            doc.rows[i].fields.avatar,
                                                                            doc.rows[i].fields.email,
                                                                                doc.rows[i].fields.mobile,
                                                                            doc.rows[i].fields.address,
                                                                                doc.rows[i].fields.username,
                                                                                doc.rows[i].fields.lastlogin,
                                                                            doc.rows[i].fields.lastlogout


                                                                        );
                                }
                                docList.push(responseDataStaff);
                                i++;
                                if(i >=  doc.rows.length ) {
                                    response.write(JSON.stringify(docList));
                                    console.log('ending response...');
                                    response.end();
                                }
                            } else {
                                console.log(err);
                            }
                        });

                    });

                }

            } else {
                console.log(err);
            }
        });

和日志文件: enter image description here

2 个答案:

答案 0 :(得分:3)

你第二次获得404的原因是因为你的应用程序崩溃了。 在推送到Bluemix之前在本地调试它。

要在本地调试,您需要为您的应用定义VCAP_SERVICES:

打开终端并输入cf env

将VCAP_SERVICES的内容复制到本地文件(例如VCAP_SERVICES.json)

使用此内容

在app.js(例如debugApp.js)旁边创建一个新文件
if(!process.env.VCAP_SERVICES){
 process.env.VCAP_SERVICES = JSON.stringify(require("./VCAP_Services.json"));
 }
 require('./app.js');

然后运行node debugApp.js

答案 1 :(得分:2)

我不确定你在这里想要做什么,但看起来很糟糕

  1. 您正在调用db.list以获取所有文档的列表 - 足够公平
  2. 然后,您遍历列表中的每个文档,以提供变量'文档'你永远不会使用
  3. 然后,您将在Cloudant中为列表中检索到的每个文档发出搜索请求。这些搜索请求将并行执行,因为它们是在for循环中启动的。所有搜索请求都是相同的,并且不包含有关您提取的文档的任何内容。
  4. 我猜这不是你打算做的。