在学习了基础课程之后,我正在学习NodeJ的高级概念。
我正在学习stepehen磨床课程,我们将使用他的repo
我最初是在回购区中漫步,那里有些新东西
我的主要问题围绕着他的index.js
file in repo
这不是主要问题,但首先他做了类似的事情
require('./routes/authRoutes')(app);
require('./routes/blogRoutes')(app);
这等同于这样的东西
const auth = require('./routes/auth.js')
const profile = require("./routes/profile.js")
app.use('/auth', auth)
app.use('/profile', profile)
第二,主要问题,在他的index.js文件中,他做了类似的事情
if (['production'].includes(process.env.NODE_ENV)) {
app.use(express.static('client/build'));
const path = require('path');
app.get('*', (req, res) => {
res.sendFile(path.resolve('client', 'build', 'index.html'));
});
}
这对我完全没有意义,有人可以向我解释以上代码的作用吗?和一篇有趣的文章,可以帮助我理解。
另外,有人可以告诉我path
module做什么吗?我遍历了他们的do文档,并且能够理解该路径允许我们访问节点项目之外的文件。那是正确的理解吗?
答案 0 :(得分:1)
关于您的第一个问题:
不一样。 app.use(...)
定义了在所有路由上执行的中间件。在这里,两个路由文件都导出一个带有一个参数的函数:应用程序(ExpressJS服务器)实例。
因此,require('./routes/blogRoutes')
为您提供了一个函数app => {...}
,并且通过添加括号和app
变量作为参数,您可以立即使用当前服务器(应用程序)实例执行此函数。最后哪个将创建路由文件中定义的所有路由。
关于第二个问题:
if
正在测试NODE_ENV变量是否等于生产量。如果处于生产模式,则app.use(express.static('client/build'));
告诉ExpressJS从client/build
文件夹提供静态文件。
其余代码app.get('*', ...)
将index.html文件发送给对任何路由的调用,但两个路由文件中定义的调用除外。
仅path.resolve
的作用是轻松构建index.html
文件的绝对路径。