NodeJ建立生产和开发

时间:2018-11-07 13:10:41

标签: node.js

在学习了基础课程之后,我正在学习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文档,并且能够理解该路径允许我们访问节点项目之外的文件。那是正确的理解吗?

1 个答案:

答案 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文件的绝对路径。