Node---文件路径与app.use()

在弄服务端渲染的时候使用到文件路径和中间件的use(),就写一下本身的理解作笔记,只记录已使用过的,概念和分析并不齐全。javascript

文件路径

在node中__dirname、__filename、process.cwd()都是绝对路径,他们都分别是什么?例子:html

1.文件夹结构以下,执行app.js:java

2.执行位置:node

3.返回结果:react

__dirname:      /Users/jenson/work/react/react-ssr/ssr-express/server
__filename:     /Users/jenson/work/react/react-ssr/ssr-express/server/app.js
process.cwd():  /Users/jenson/work/react/react-ssr/ssr-express
复制代码

当咱们把文件夹的层次加深再打印出来,能够看到:typescript

1.文件夹结构以下,执行app.js:express

2.执行位置:npm

3.返回结果:浏览器

__dirname:      /Users/jenson/work/react/react-ssr/ssr-express/server/demo
__filename:     /Users/jenson/work/react/react-ssr/ssr-express/server/demo/app.js
process.cwd():  /Users/jenson/work/react/react-ssr/ssr-express
复制代码

__dirname和__filename与执行的文件的位置有关。bash

如今改变一下执行文件的路径:

把执行路径深刻到server文件夹和demo文件夹时返回是:

// server
__dirname:      /Users/jenson/work/react/react-ssr/ssr-express/server/demo
__filename:     /Users/jenson/work/react/react-ssr/ssr-express/server/demo/app.js
process.cwd():  /Users/jenson/work/react/react-ssr/ssr-express/server

// demo
__dirname:      /Users/jenson/work/react/react-ssr/ssr-express/server/demo
__filename:     /Users/jenson/work/react/react-ssr/ssr-express/server/demo/app.js
process.cwd():  /Users/jenson/work/react/react-ssr/ssr-express/server/demo
复制代码

process.cwd()与用户node操做的文件夹执行位置有关。

结论:

// app.js 文件路径
console.log('__dirname: ', __dirname);         // 得到当前执行文件所在目录的完整 - 目录名
console.log('__filename: ', __filename);       // 得到当前执行文件的带有完整绝对路径的 - 文件名
console.log('process.cwd(): ', process.cwd()); // 得到当前执行node命令时候的文件夹 - 目录名 
复制代码

app.use

作服务端渲染时使用create-react-app并直接 build 生成以下目录结构:

npx create-react-app ssr-express --typescript

cd ssr-express

npm run build

// app.js
const express = require('express');
const path = require('path');
const app = express();

const config = {
  port: 3030
}

// 把build目录下的文件录入express
app.use(express.static(
  path.join(__dirname, '..', '/build')
));

app.listen(config.port ,function(){
  console.log("open Browser http://localhost:" + config.port);
});
复制代码

app.use()在koa和express里面的使用方法差很少,都是为中间件存放方法和文件。

上面代码执行后显示以下:

这里就是把build文件夹这个录入到express里,因此直接打开 http://127.0.0.1:3030 就是build里面的内容。

因此当咱们作浏览器中打开 http://127.0.0.1:3030/logo512.png

咱们本身建立一个 demo 实例:

const express = require('express');
const path = require('path');
const app = express();

const config = {
  port: 3030
}

// 把build目录下的文件录入express
app.use(
  express.static(
    path.join(__dirname, '..', '/build')
  )
);
// 建立demo实例
app.use('/demo', (req, res, next) => {
  res.send('hello~');
});

app.listen(config.port ,function(){
  console.log("open Browser http://localhost:" + config.port);
});

复制代码

具体概念和其余用途能够查看 文档 或者本身搜索。

相关文章
相关标签/搜索