node express 学习

不使用框架,使用 node 自带的 http 模块创建一个基本服务

首先创建一个文件,底下创建一个 index.js 文件。内容如下。

然后执行 node index.js。就开启了一个服务。

// 引入 node 自带 http 模块
const http = require("http");

// 使用 http 的 createServer 方法
// 创建 HTTP 服务器并监听 8000 端口的所有请求
http.createServer((request, response) => {
  // 设置可访问的源。 http://localhost:7000 或 *
  response.setHeader("Access-Control-Allow-Origin", "*"); 
  // 不清楚也不重要
  response.setHeader("Access-Control-Allow-Headers", "Content-Type"); 
  // 不清楚也不重要
  response.setHeader("content-type", "application/json")
  // 设置响应数据
  response.end(JSON.stringify({
      data: {
          msg: 'hello world!'
      },
      status: 'success'
  }))
}).listen(8000);

// 在控制台打印访问服务器的 URL
console.log('服务器运行于 http://127.0.0.1:8000/');

法一:直接在浏览器访问 http://127.0.0.1:8000/ 。

在这里插入图片描述

法二:在 vue 文件中简单写一个请求,打开浏览器发现控制台打印了我们在响应里设置返回的数据。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0JMWGOQh-1679777846535)(/docs/img/2023-03-26-03-28-10.png)]

<script setup lang="ts">
  import {watchEffect} from 'vue'
  const url = 'http://127.0.0.1:8000/'
  watchEffect(() => {
    fetch(url)
      .then(res => res.json())
      .then(data => {
        console.log(data)
      })
  })
</script>

express 的 hello world 使用示例

重新创建一个目录。

执行 npm init -y

执行 npm i express

然后创建一个 index.js 文件。写入如下内容:

// 引入 express 模块
const express = require('express');
// 创建 express 应用。习惯把这个应用叫做 app
const app = express();

// 拦截路径是 / 的 get 请求,执行回调函数,直接响应返回字符串 Hello World!
app.get('/', (req, res) => {
  res.send('Hello World!');
});

// 监听端口 3000
app.listen(3000, () => {
  console.log('示例应用正在监听 3000 端口 !');
});

再然后浏览器访问 http://localhost:3000/

在这里插入图片描述

在这里插入图片描述

node 导入导出模块(CommonJS 模块规范)

导出

./myUtil.js

const speak = () => {
  // ...
  console.log('我讲话了')
}

// 最终导出的是 module.exports。它是一个对象。
// exports 是 module.exports 的引用。

/**
  const exports = module.exports
*/

// 所以你可以往 exports 上添加属性或方法
// 但不能直接用新的一个对象赋值给 exports
// 否则导出的就是一个空对象(没有使用 module.exports)

// exports.speak = speak
module.exports = {
  speak
}

导入

const myUtil = require('./myUtil')

myUtil.speak()

在这里插入图片描述

express 的路由分组

express.Router() 相当于创建了一个子 app。

然后主 app 通过 app.use 给这个子 app 下的所有路由添加前缀。

如果想访问子 app 的路由,也得带上前缀。

index.js

const express = require('express');
const pageA = require('./pageA')
const app = express();

app.use('/pageA/', pageA);

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('示例应用正在监听 3000 端口 !');
});

pageA.js

const express = require('express');
const router = express.Router();

// 首页路由
router.get('/', (req, res) => {
  res.send('a/home');
});

// “关于”页面路由
router.get('/about/', (req, res) => {
  res.send('a/about');
});

module.exports = router;

中间件

中间件就是对请求和响应做一些操作。

编写一个自己的中间件。

现在第一次,以及之后每次切换路由,都会打印执行了中间件,并且打印当前的请求路径

const express = require('express');
const pageA = require('./pageA')
const app = express();

// 示例中间件函数
const a_middleware_function = (req, res, next) => {
  // ... 进行一些操作
  console.log('执行了中间件', req.path);
  next(); // 调用 next() ,Express 将调用处理链中下一个中间件函数。
};

// 使用中间件
app.use(a_middleware_function)

app.use('/pageA/', pageA);

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('示例应用正在监听 3000 端口 !');
});

托管静态文件

有什么用呢?就是可以通过 url 直接访问到被静态托管的文件。文件类型不限。

app.use(express.static('public'));
const express = require('express');
const pageA = require('./pageA')
const app = express();

// 托管当前目录下的 img 下的图片
app.use(express.static('./img/'));

app.use('/pageA/', pageA);

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(3000, () => {
  console.log('示例应用正在监听 3000 端口 !');
});

现在 ‘public’ 文件夹下的所有文件均可通过在根 URL 后直接添加文件名来访问了,比如:

http://localhost:3000/images/dog.jpg
http://localhost:3000/css/style.css
http://localhost:3000/js/app.js
http://localhost:3000/about.html

可以通过多次调用 static() 来托管多个文件夹。

app.use(express.static('public'));
app.use(express.static('media'));

还可以为静态 URL 创建一个前缀。这些文件将通过 ‘/media’ 前缀调用:

app.use('/media', express.static('public'));
http://localhost:3000/media/images/dog.jpg
http://localhost:3000/media/video/cat.mp4
http://localhost:3000/media/cry.mp3

使用数据库

暂时用不到。

模板引擎

如果想返回 html 模板,并且动态改变一些数据,需要使用到模板引擎。常见的有 ejs 模板引擎。

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

// 设置 ejs 模板引擎
app.set('view engine', 'ejs');
// 设置模板存放的位置。第一个参数表示设置模板存放位置。
app.set('views', path.join(__dirname, 'pages'));
// 将模板的 .ejs 后缀改为 .html
app.engine('html', require('ejs').renderFile);

app.get('/', (req, res) => {
  res.render('index.html', { pageTitle: 'My Website' });
});

app.listen(3000, () => {
  console.log('示例应用正在监听 3000 端口 !');
});

如果只想返回静态的 html 模板,也是可以的。

app.get('/', function(req, res) {
  res.sendFile(__dirname + '/index.html');
});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值