簡體   English   中英

Node.js path.join的參數必須是字符串,但參數是路徑

[英]Node.js Arguments to path.join must be strings but arguments are a path

我在Node.js v0.10.36版中使用路徑模塊。 它可以在Node.js v0.10.30版的筆記本電腦上使用。 我基本上是在傳遞包含在對象中的字符串,該字符串包含從Sequelize處理的函數(從MySQL數據庫獲取)的返回值之一。 如果我將path.join函數切換為常規path +'/'++文件,則可以正常工作。 但是,由於某種原因,path.join會在程序中不斷拋出錯誤。 我添加了一些console.logs來說明我的觀點。 錯誤來自以下幾行:

console.log( this.recordingRow.get( 'id' ) );
console.log( config.path.audio );
var filepath = path.join( config.path.audio, this.recordingRow.get( 'id' ) );

但是這是輸出:

241
/home/sonar/sonar/files/audio

Unhandled rejection 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 Stream.startSonarData (/home/sonar/sonar/inc/streams/stream.js:148:22)                                                                                                                                                                
    at Object.<anonymous> (/home/sonar/sonar/inc/streams/stream.js:74:8)                                                                                                                                                                     
    at Object.tryCatcher (/home/sonar/sonar/node_modules/sequelize/node_modules/bluebird/js/main/util.js:24:31)                                                                                                                              
    at Promise._settlePromiseFromHandler (/home/sonar/sonar/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:452:31)                                                                                                          
    at Promise._settlePromiseAt (/home/sonar/sonar/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:530:18)                                                                                                                   
    at Promise._settlePromises (/home/sonar/sonar/node_modules/sequelize/node_modules/bluebird/js/main/promise.js:646:14)                                                                                                                    
    at Async._drainQueue (/home/sonar/sonar/node_modules/sequelize/node_modules/bluebird/js/main/async.js:177:16)                                                                                                                            
    at Async._drainQueues (/home/sonar/sonar/node_modules/sequelize/node_modules/bluebird/js/main/async.js:187:10)                                                                                                                           
    at Async.drainQueues (/home/sonar/sonar/node_modules/sequelize/node_modules/bluebird/js/main/async.js:15:14)                                                                                                                             
    at process._tickCallback (node.js:442:13)   

好吧,錯誤非常明顯。 參數之一不是字符串。 第一個似乎是一個數字。 只需先將其轉換為字符串即可,例如通過String

path.join(a, String(b));

如@Felix所述,您的第二個參數不是字符串,而是數字。 有兩種方法將數字類型轉換為字符串:-

  • path.join(config.path.audio,~~(this.recordingRow.get('id')));
  • path.join(config.path.audio,String(this.recordingRow.get('id')));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM