Javascript 尝试使用元数据时出现path.join错误的节点dbox问题
我正在尝试使用节点dbox在Dropbox中列出我的内容。我与OAuth建立了连接,它确实通过了,但是当我尝试执行client.metadata函数时,它显示了path.join错误。这是代码 app/index.js: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
// 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.jsvar 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();
});
});