Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 尝试使用元数据时出现path.join错误的节点dbox问题_Javascript_Node.js_Dropbox Api_Ecmascript 5 - Fatal编程技术网

Javascript 尝试使用元数据时出现path.join错误的节点dbox问题

Javascript 尝试使用元数据时出现path.join错误的节点dbox问题,javascript,node.js,dropbox-api,ecmascript-5,Javascript,Node.js,Dropbox Api,Ecmascript 5,我正在尝试使用节点dbox在Dropbox中列出我的内容。我与OAuth建立了连接,它确实通过了,但是当我尝试执行client.metadata函数时,它显示了path.join错误。这是代码 app/index.js: // MODULE REQUIERMENTS var dbox=require('dbox'), http= require('http'), fs=require('fs'), path= require('path'), express=re

我正在尝试使用节点dbox在Dropbox中列出我的内容。我与OAuth建立了连接,它确实通过了,但是当我尝试执行client.metadata函数时,它显示了path.join错误。这是代码

app/index.js:

// MODULE REQUIERMENTS
var dbox=require('dbox'),
    http= require('http'),
    fs=require('fs'),
    path= require('path'),
    express=require('express'),
    bodyParser = require('body-parser'),
    multipart=require('connect-multiparty');


//PATH JSON AUTH FILE 
var auth_path=path.join(__dirname,'../auth.json'),
    config = JSON.parse(fs.readFileSync(auth_path)),
    dboxapp= dbox.app(config),
    token=false,
    client = false ;

//NEW EXPRESS 
var app = new express();

// MIDDLEWARE FOR MULTIPART
var  multipartMiddleware= multipart();

//SET THE JADE VIEWS
app.set('views', __dirname + '/views');
app.set('view engine','jade'); 
app.use(bodyParser());
app.use(express.static(path.join(__dirname,'public')));

app.use(function(req,res,next) {
    if (client || token) {
        next();
    } else{
        dboxapp.requesttoken(function(status,request_token) {
            token=request_token;
            var oAuthURL = request_token.authorize_url +  '&oauth_callback=http://localhost:3000/access';
            res.redirect(oAuthURL);
        });
    };
});

app.get('/access',function (req,res) {
    dboxapp.accesstoken(token,function(status,access_token) {
        client= dboxapp.client(access_token);
        res.redirect('/album.json');
    });
});

app.get('/album',function (req,res) {
    console.log(client);
    client.metadata("/",{list:true},function (status, reply) {
        console.log(reply);
        res.render('layout',reply);
    });
});

app.get('/album.json',function (req,res) {
    client.metadata('/ ',function (status, reply) {
        res.json(reply);
    });
});

module.exports=app;
视图/布局.jade

doctype html
html 
  head 
    title Cova Nosejs API Dropbox 
    link(rel="stylesheet",href="//netdna.bootstrapcdn.com/bootstrap/3.1.1/css/bootstrap.min.css")
  body
    ul 
      each file in contents
        li= file.path
控制台错误消息:

ropboxAPI> Express server (DropboxAPI) listening on port 3000
[Function]
TypeError: Arguments to path.join must be strings
    at path.js:360:15
    at Array.filter (native)
    at Object.exports.join (path.js:358:36)
    at Object.url (/Documents/workspace/DropboxAPI/node_modules/dbox/lib/helpers.js:127:27)
    at Object.metadata (/Documents/workspace/DropboxAPI/node_modules/dbox/lib/dbox.js:200:29)
    at Object.module.exports [as handle] (/Documents/workspace/DropboxAPI/app/index.js:59:9)
    at next_layer (/Documents/workspace/DropboxAPI/node_modules/express/lib/router/route.js:103:13)
    at Route.dispatch (/Documents/workspace/DropboxAPI/node_modules/express/lib/router/route.js:107:5)
    at /Documents/workspace/DropboxAPI/node_modules/express/lib/router/index.js:213:24
    at Function.proto.process_params (/Documents/workspace/DropboxAPI/node_modules/express/lib/router/index.js:284:12)

您可以尝试显式地将参数强制转换为字符串

app.use(express.static(path.join(__dirname.toString(),'public')));

很抱歉,这不是一个很好的答案,但有时从小事做起,解决问题会有所帮助。下面是一些适用于我的代码,使用OS X上的节点版本0.10.24和dbox版本0.6.3(当前来自npm):

var-APPKEY='',
APPSECRET='';
var dbox=require('dbox'),
readline=require('readline');
var app=dbox.app({
应用程序密钥:应用程序密钥,
app_secret:APPSECRET
});
app.requesttoken(函数(状态,requesttoken){
console.log('转到https://www.dropbox.com/1/oauth/authorize?oauth_token='+requestToken.oauth_token);
rl=readline.createInterface(process.stdin,process.stdout);
rl.setPrompt('授权后按enter:');
rl.prompt();
rl.on('line',函数(line){
app.accesstoken(requestToken,函数)(状态,accesstoken){
var client=app.client(accessToken);
client.metadata(“/”,函数(状态,回复){
控制台日志(应答);
});
})
rl.close();
});
});

你能试试这个代码,看看它是否有效吗?如果是这样,我们可以试着找出你的代码有什么不同。(如果没有,我们可以尝试找出您的环境有什么不同。)

检查package.json上的依赖项后,dbox的设置如下:“*”,并且它没有采用最新版本(即0.6.3)


此案例的修复方法是指定版本“dbox”:“0.6.3”

,不幸的是,您的建议不起作用,但仍发送相同的错误。我认为它与节点dbox有关。你能分享你的配置吗?(一定要把所有秘密都用X表示出来。)具体来说,是否有
范围
字段?根据错误,问题是在线的,我猜这意味着
scope
不是一个字符串…?没有太多,只有server.js
var http=require('http')、repl=require('repl')、app=require('./app');http.createServer(app).listen(3000,function(){console.log('Express server(DropboxAPI)监听端口'+3000);})
和具有Dropbox API键的auth.json
{“app_key”:“xxx”,“app_secret”:“xxxx”}
var APPKEY = '<REDACTED>',
    APPSECRET = '<REDACTED>';

var dbox = require('dbox'),
    readline = require('readline');

var app = dbox.app({
    app_key: APPKEY,
    app_secret: APPSECRET
});

app.requesttoken(function (status, requestToken) {
    console.log('Go to https://www.dropbox.com/1/oauth/authorize?oauth_token=' + requestToken.oauth_token);
    rl = readline.createInterface(process.stdin, process.stdout);
    rl.setPrompt('Press enter once you\'ve authorized: ');
    rl.prompt();
    rl.on('line', function (line) {
        app.accesstoken(requestToken, function (status, accessToken) {
            var client = app.client(accessToken);
            client.metadata('/', function (status, reply) {
                console.log(reply);
            });
        })
        rl.close();
    });
});