2017-08-23 29 views
-1

我正在合併swagger文件。我想通過陣列狀發送數組在module.exports承諾

[ 
    { method: '1', path: '/signIn', handler: funation() {return "abcd"}, 
    { method: '2', path: '/signOut', handler: funation() {return "123"}, 
] 

我得到的結果是按我的需要,但它並沒有傳遞到module.exports,我已經檢查到另一個文件控制檯需要這個文件後, 我的代碼是這樣

jsonResolve(root, options).then(function (results) { 
    const result = results.resolved.paths; 
    // console.log(result); 
    for (key in result) { 
    // console.log('keys', key); 
    const apiRoute = key; 
    const apiDescription = result[key]; 
    let controller = apiDescription['x-swagger-router-controller']; 
    for (method in apiDescription) { 
     // console.log("methods", method); 
     let newRoute = {}; 
     if (method !== 'x-swagger-router-controller') { 
     let operationId1 = apiDescription[method].operationId; 

     newRoute = { 
      method: method, 
      path: apiRoute, 
      handler: controllers[controller][operationId1](), 
     }; 
     exoprtData.push(newRoute); 
     } 
    } 
    } 
    return exoprtData; 
}) 
.then((result) => { 
    console.log(result); 
    module.exports = result; 
}) 

我已經檢查到最後的結果。但不能傳遞到module.exports

我需要的文件的代碼是這樣,

var ApiRoutes = require("./routes/api"); 
console.log("ApiRoutes", ApiRoutes); 

,在這裏我得到結果到控制檯像

ApiRoutes {} 

請幫我解決這個問題。在此先感謝

+0

「模塊應該導出函數而不是數據」 – Vanojx1

+0

您不能異步分配到'module.exports'。嘗試導出路線的承諾。 – Bergi

回答

0

Node.js期望任何模塊同步加載 - 即。您在當前執行循環中將必須分配給module.exports,否則模塊的導出內容將是默認的空對象。

解決承諾後,您正在分配到module.exports這將不起作用 - 在解決諾言時,Node.js已經完成加載模塊並緩存導出的值(空對象)作爲模塊的內容。您現在不能通過指定module.exports來更改它。

爲了解決這個問題,你必須:

  • 出口返回通過承諾陣列功能
  • 不知怎的,使其同步工作(取決於什麼jsonResolve()一樣)
  • 分配實際的承諾到module.exports
+1

您可以同步將承諾分配給'module.exports'(而不是承諾的結果) – Bergi