如何在节点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')));
}
- 你的榜样将无法正常工作,至少是因为你宣布这两个文件
var app = express()
两个独立Express服务器。 - 此代码并非最适合在导出/需求中练习,因为此类服务器初始化通常放置在一个文件中。
但无论如何,如果你想用这个例子,并使其发挥作用,让我们做这样:
./ 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中。
谢谢!你可以向我解释一些事情 - 为什么分离中间件路线和我的服务器启动位置是不好的做法?我实际上看到了这个地方,认为在一个文件中有起点(仅启动服务器)很好,并且休息别处。此外,你需要的路线文件,但如果我导出(module.exports =应用程序),然后我不能要求index.js文件,并使用应用程序的app.use ...?你的作品,所以我只是想明白这一切。感谢:) – javascripting
这是不错的做法,将所有路线和中间件存储在单独的文件夹中。然后,您需要中间件来路由文件,并使用特定的中间件来执行特定的路由。 你的例子实际上没有任何路线。它只是一个静态服务器,它提供来自“公共”目录的文件。 –
查看更多示例和解释: https://developer.mozilla.org/en-US/docs/Learn/Server-side/Express_Nodejs/routes –
究竟哪些方法无效?你期望什么网址工作,当你尝试它时会发生什么? – jfriend00
当我只有一个文件的整个代码,它的工作原理 - 我静态地通过app.use服务于我的公共文件夹中的index.html文件。当我将代码分成2个文件时,它不再工作 – javascripting