Javascript NodeJS表示需要和启动
我正在学习NodeJS和Express,然后我被困在require是如何工作的 我的主文件是server.js,另一个测试文件是test.js [server.js] [路由/test.js] 代码按预期工作-转到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
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;