【问题标题】:Node JS Separate a function from a routeNode JS 将函数与路由分离
【发布时间】:2017-10-04 15:21:49
【问题描述】:

我创建了一些代码(一个简单的文件上传器),可以很好地处理一个文件。我想开始将代码分解成几个文件。我想要一个 routes.js(控制路由)、imports.js(包含我的函数)和我的服务器。我在从路线调用我的导入时遇到问题。我收到错误 import is not a function。谢谢!!

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)

【问题讨论】:

  • 你真的对如何分解文件感到困惑,..module.exports = function (imports) { var imports = ... 这只是一开始就没有任何意义。
  • 我试图从 Udemy 课程中学习一个示例。你能帮我以更好的方式做到这一点吗?或将我引导至资源。
  • 在您尝试拆分成单独的文件之前,您有源代码吗?
  • 您正在使您的代码更加复杂。你可以大大简化它。
  • 通过分离吗?如果您指的是多个输出,那是为了帮助我理解代码。我是新人。

标签: javascript node.js


【解决方案1】:

请注意,您包含在路由器中的每个函数都必须有请求和响应对象作为参数。

将您的功能更改为:

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

现在在路由器文件中导入此功能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2013-08-22
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    相关资源
    最近更新 更多