如何在节点js中正确导出和需要?

问题描述:

我在node/express上看了一个关于export/require的教程,想知道是否有人可以用我的例子向我解释: 为什么我的app.js路由不工作?我需要输出什么信息才能使其工作?非常感谢!如何在节点js中正确导出和需要?

index.js:

'use strict' 

    var express = require('express'); 

    var app = express(); 
    module.exports = app; 

    var PORT = process.env.PORT || 1337; 
     app.listen(PORT, function() { 
     console.log('Server is listening!'); 
    }) 

app.js:

var express = require('express'); 
    var bodyParser = require('body-parser'); 
    var path = require('path'); 
    var app = express(); 
    //var app=require('./index.js'); 
    module.exports = function() { 
     app.use(express.static(path.join(__dirname, '../public'))); 
     app.use(express.static(path.join(__dirname, '../browser'))); 
    } 
+0

究竟哪些方法无效?你期望什么网址工作,当你尝试它时会发生什么? – jfriend00

+0

当我只有一个文件的整个代码,它的工作原理 - 我静态地通过app.use服务于我的公共文件夹中的index.html文件。当我将代码分成2个文件时,它不再工作 – javascripting

  1. 你的榜样将无法正常工作,至少是因为你宣布这两个文件var app = express()两个独立Express服务器。
  2. 此代码并非最适合在导出/需求中练习,因为此类服务器初始化通常放置在一个文件中。

但无论如何,如果你想用这个例子,并使其发挥作用,让我们做这样:

./ index.js

'use strict' 

var express = require('express'); 
var setupServing = require('./setupServing.js'); //import our function 
var PORT = process.env.PORT || 1337; 

var app = express(); //create express app 
setupServing(app); //call imported function to config our app 

app.listen(PORT, function() { //start 
    console.log('Server is listening!'); 
}) 

./ setupServing.js

var express = require('express'); 
var path = require('path'); 
//export function which can configure static serve for app 
module.exports = function(app) { //take app as an argument 
    app.use(express.static(path.join(__dirname, '../public'))); 
} 

请注意,这个例子仍然不够合理,我不认为你会在任何真实的项目中面对这样的代码,但无论如何它将工作并演示出口/需求在nodejs中。

+0

谢谢!你可以向我解释一些事情 - 为什么分离中间件路线和我的服务器启动位置是不好的做法?我实际上看到了这个地方,认为在一个文件中有起点(仅启动服务器)很好,并且休息别处。此外,你需要的路线文件,但如果我导出(module.exports =应用程序),然后我不能要求index.js文件,并使用应用程序的app.use ...?你的作品,所以我只是想明白这一切。感谢:) – javascripting

+0

这是不错的做法,将所有路线和中间件存储在单独的文件夹中。然后,您需要中间件来路由文件,并使用特定的中间件来执行特定的路由。 你的例子实际上没有任何路线。它只是一个静态服务器,它提供来自“公共”目录的文件。 –

+0

查看更多示例和解释: https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/routes –