2017-10-04 36 views
0

我創建了一些代碼(一個簡單的文件上傳器),它可以在一個文件上很好地工作。我想開始把代碼分解成幾個文件。我想要一個routes.js(控制路由),imports.js(包含我的函數)和我的服務器。我在從路線調用我的導入時遇到問題。我得到錯誤導入不是一個函數。謝謝!!節點JS從路線中分離功能

Server.js ------------------------------------------- ----------------

var express = require('express');  
var app = express(); 
var passport = require('passport'); 
var ejs = require('ejs'); 
var bodyParser = require('body-parser'); 
var imports = require('./src/import.js'); 
var port = process.env.PORT || 8080; 
app.use(express.static('public')); 

require('./src/import')(imports); 
require('./app/routes.js')(app, imports); 

app.listen(port); 
console.log('The app is running on port ' + port) 

routes.js ------------------------ -----------------------------------

module.exports = function (app, imports) { 

    //home Page 
    app.get('/', function (req, res) { 
     res.render('index.ejs'); 
    }); 

    app.post('/import', imports(){}); 
}; 

import.js ----- ----------------------------------------

var multer = require('multer'); 
var fs = require('fs'); 



module.exports = function (imports) { 

    var imports = multer({ dest: 'C:/Users/ron/temp/' }); 
    var type = imports.single('file'); 

    imports(type, function (req, res) {//removed type 


     var fileType = req.file.type; 

     console.log('output' + req.file); 
     console.log(fileType); 

     var file = __dirname + "/" + req.file.name; 
     fs.readFile(req.file.path, function (err, data) { 
      fs.writeFile(file, data, function (err) { 

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

        var fileName = req.file.originalname; 

        response = { 
         message: 'File uploaded successfully', 
         fileinfo: req.file, 
         filename: fileName 
        }; 
       } 
       console.log(response); 
       res.end(JSON.stringify(response)); 

       var filePath = req.file.destination + req.file.originalname; 

       fs.rename(req.file.destination + req.file.filename, req.file.destination + req.file.originalname, function (err) { 
        if (err) console.log('ERROR:' + err); 
        console.log('the path is...' + filePath); 
        console.log('the name is...' + fileName); 

       }); 
      }); 
     }); 
    }); 
}; 

單文件解決方案........... ........................................

var express = require('express'); 
var app = express(); 
var passport = require('passport'); 
var ejs = require('ejs'); 
var bodyParser = require('body-parser'); 
var multer = require('multer'); 
var fs = require('fs'); 

var port = process.env.PORT || 8080; 

var imports = multer({ dest: 'C:/Users/ron/temp/' }); 
var type = imports.single('file'); 
var urlencodedParser = bodyParser.urlencoded({extended: false}); 

app.use(bodyParser.urlencoded({ extended: false })); 
app.use(express.static('public')); 


app.get('/', function (req, res) { 
    res.render('index.ejs'); 
}); 

app.post('/import', type, function (req, res) {//removed type 


    var fileType = req.file.type; 

    console.log('output' + req.file); 
    console.log(fileType); 

    var file = __dirname + "/" + req.file.name; 
    fs.readFile(req.file.path, function (err, data) { 
     fs.writeFile(file, data, function (err) { 

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

       var fileName = req.file.originalname; 

       response = { 
        message: 'File uploaded successfully', 
        fileinfo: req.file, 
        filename: fileName 
       }; 
      } 
      console.log(response); 
      res.end(JSON.stringify(response)); 

      var filePath = req.file.destination + req.file.originalname; 

      fs.rename(req.file.destination + req.file.filename, req.file.destination + req.file.originalname, function (err) { 
       if (err) console.log('ERROR:' + err); 
       console.log('the path is...' + filePath); 
       console.log('the name is...' + fileName); 

      }); 
     }); 
    }); 
}); 

app.listen(port); 
console.log('The app is running on port ' + port) 
+0

你真的讓自己對如何分解文件感到困惑,..'module.exports = function(imports){var imports = ...'這對於一開始沒有任何意義。 – Keith

+0

我試圖效仿一個來自Udemy課程的例子。你能幫助我以更好的方式做到這一點嗎?或者直接給我一個資源。 – RMichalowski

+0

在嘗試分解成單獨的文件之前,你有源嗎? – Keith

回答

0

請注意,每個函數你包含在你的路由器中必須有reqest和response對象作爲參數。

更改功能:

function imports (req,res){ 
//your code 
} 
module.exports ={ 
imports:imports 
} 

現在導入路由器文件這一功能。