Javascript NodeJS表示需要和启动

Javascript NodeJS表示需要和启动,javascript,node.js,mongodb,express,Javascript,Node.js,Mongodb,Express,我正在学习NodeJS和Express,然后我被困在require是如何工作的 我的主文件是server.js,另一个测试文件是test.js [server.js] [路由/test.js] 代码按预期工作-转到http://localhost:3000/api/t打印“现在…”消息所以我的问题是,为什么我不在test.js中再次创建express应用程序,而从express.router()中引用路由器 当我试图用猫鼬创建一个积垢时,这会变得更加混乱。为什么我必须在测试路由器文件中引用mon

我正在学习NodeJS和Express,然后我被困在require是如何工作的

我的主文件是server.js,另一个测试文件是test.js

[server.js]

[路由/test.js]

代码按预期工作-转到
http://localhost:3000/api/t
打印“现在…”消息所以我的问题是,为什么我不在test.js中再次创建express应用程序,而从express.router()中引用路由器

当我试图用猫鼬创建一个积垢时,这会变得更加混乱。为什么我必须在测试路由器文件中引用mongoose模块和模式,但不必像在main server.js文件中那样建立连接

到目前为止,我已经理解了这样一个事实:require实际上是我正在使用的模块的本地部分,这实际上是有意义的,因为每当我在其他模块中需要依赖模块时,我都必须引用它们。但是我不必在路由文件中再次建立连接,不必侦听路由文件中的某个端口,在路由文件中使用body解析器(当我使用它时)

任何指示都会有帮助。提前感谢。

require()
加载一个代码模块,并返回分配给
模块的任何内容。导出模块内部的
。一般来说,模块的编写应该使加载它们实际上不会创建任何东西,而只是在导出中返回允许调用方对模块进行处理的内容。这确实是express模块所做的

对于
express
模块,它返回一个构造函数,可以调用该构造函数来创建一个express应用程序,就像您在
server.js
中使用
app=express()
所做的那样。您在
routes/test.js中没有这样做,因此您没有在那里创建另一个express应用程序

注意,由于函数是Javascript中的对象,express模块返回的构造函数也可以有自己的属性,例如
express.Router
属性,您正在
routes/test.js
中使用该属性

至于你的猫鼬问题,我不太明白你在问什么。如果您向我们展示该特定代码,我们可能会对该问题发表进一步的评论

路由文件中的方法通过Express创建的
req
res
参数传递,作为处理传入HTTP请求的一部分。这些方法位于哪个文件中并不重要。Express的工作方式是,传入的http连接通过各种Express中间件步骤传递,并转化为
request
response
对象,然后将这些对象传递给路由器,以确定哪些特定处理程序应处理该特定请求


如果您在Express中使用
主体解析器
cookie解析器
中间件(或任何其他中间件功能),那么在将请求传递到任何路由器之前,这些中间件步骤将已经执行。如果这些中间件步骤所做的是在
请求
对象上创建属性(这是一种常见的方法),那么该数据将位于传递给路由处理程序的
请求
对象上。除了注册路由处理程序之外,您不必在routes模块中执行任何特殊操作。这就是Express及其中间件的工作原理。

非常感谢您详细的回答。总而言之。我问的关于mongoose的问题是,我正在server.js文件中建立连接,名为“mongoose.connect”mongodb://usr:pwd@localhost:27017/testdb');“但是我不必在test.js路由器中再次建立这个模型,在那里我使用测试模式操作数据。我猜连接是在到达路由器之前建立的,因此当我调用.find()时,现有的连接正在被使用?
var express=require('express');

//Include Routes
var rTest=require('./routes/test');

//Express Application COnfiguration
var app=express();

var port=process.env.PORT||3000;
var router=express.Router();    

//Index
router.get('/',function(req,res){
    res.json({message:'Welcome to Index!'});

});    

app.use('/api/t',rTest); //Test    

app.listen(port);
var express=require('express');
var router=express.Router();

    router.route('/')
        .get(function(req,res){
            res.send('Now Test Running OK!');
        });

    module.exports=router;