使用Express模拟接口数据

Express简介

Express是一个基于 Node.js 平台,快速、开放、极简的 Web 开发框架。Express 在 node.js 基础上扩展了 Web 应用所需的功能,并提供了丰富的 HTTP 实用工具以及来自Connect框架的中间件,使得创建强健、友好的 API 变得快速而且简单。

NodeJS下安装Express

npm install express -g // 全局安装
npm install express --save // 项目本地安装

模拟接口数据

创建本地应用

打开命令行窗口,切换到要创建应用的目录下,执行如下命令完成项目创建。

// 创建项目目录
mkdir api-server

// 进入项目目录
cd api-server

// 生成项目的 package.json 文件,此命令需要输入几个参数,参见下图
npm init

// 引入依赖
npm install express --save

如图所示,本例中项目的入口文件名称被指定为 server.js (默认为 index.js),在项目根目录下创建 server.js ,内容如下:

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

// 模拟字符串数据
app.get('/user/18818578458', (req, res) => res.send('{id:"18818578458",name:"pengjunlee"}'));

// 模拟HTML数据
app.get('/index', function getHome(req,res,next){
    res.setHeader('Content-Type', 'text/html');
    res.sendfile(`${__dirname}/index.html`);
})

app.listen(3000, () => console.log('Example app listening on port 3000!'));

 然后,执行如下命令启动项目并监听 3000 端口:

node server.js

访问 http://localhost:3000/user/18818578458 ,返回如下内容:

使用Express-Generator创建应用

通过应用生成器工具 express-generator 可以快速创建一个应用的骨架。express-generator 包含了 express 命令行工具。通过如下命令即可安装:

npm install express-generator -g

-h 参数可以列出所有可用的命令行参数:

> express -h

Usage: express [options] [dir]

Options:

-h, --help // 输出使用方法
--version // 输出版本号
-e, --ejs // 添加对 ejs 模板引擎的支持
--hbs // 添加对 handlebars 模板引擎的支持
--pug // 添加对 pug 模板引擎的支持
-H, --hogan // 添加对 hogan.js 模板引擎的支持
--no-view // 创建不带视图引擎的项目
-v, --view <engine> // 添加对视图引擎(view) <engine> 的支持 (ejs|hbs|hjs|jade|pug|twig|vash) (默认是 jade 模板引擎)
-c, --css <engine> // 添加样式表引擎 <engine> 的支持 (less|stylus|compass|sass) (默认是普通的 css 文件)
--git // 添加 .gitignore
-f, --force // 强制在非空目录下创建

例如,如下命令创建了一个名称为 mock-server 的 Express 应用。此应用将在当前目录下的 mock-server 目录中创建,并且设置为使用 Pug 模板引擎(view engine):

> express --view=pug mock-server

create : mock-server\
create : mock-server\public\
create : mock-server\public\javascripts\
create : mock-server\public\images\
create : mock-server\public\stylesheets\
create : mock-server\public\stylesheets\style.css
create : mock-server\routes\
create : mock-server\routes\index.js
create : mock-server\routes\users.js
create : mock-server\views\
create : mock-server\views\error.pug
create : mock-server\views\index.pug
create : mock-server\views\layout.pug
create : mock-server\app.js
create : mock-server\package.json
create : mock-server\bin\
create : mock-server\bin\www

change directory:
> cd mock-server

install dependencies:
> npm install

run the app:
> SET DEBUG=mock-server:* & npm start

然后,切换到项目目录,安装所有依赖包:

> cd mock-server
> npm install

在 MacOS 或 Linux 中,通过如下命令启动此应用:

$ DEBUG=mock-server:* npm start

在 Windows 中,通过如下命令启动此应用:

> set DEBUG=mock-server:* & npm start

然后在浏览器中打开 http://localhost:3000/ 网址就可以看到这个应用了。

通过生成器创建的 mock-server 应用目录结构如下:

webpack项目中使用Express

旧版的webpack项目是在dev-server.js文件中配置的模拟数据,新版的webpack项目已经去掉了dev-server.js和dev-client.js,模拟数据改为在 webpack.dev.conf.js 中进行配置。

首先切换到项目目录,执行 npm install express --save 为项目安装 express 。然后在 webpack.dev.conf.js 的如下两处位置添加代码。

  /* 。。。 */
const portfinder = require('portfinder')

/* ====== 要插入的第一段代码开始 ====== */

// 引入express
const express = require("express")
const bodyParser = require('body-parser');

 
// 创建express实例
const app = express()

// 解析application/json
var jsonParser = bodyParser.json();

// 解析application/x-www-form-urlencoded
// var urlencodedParser = bodyParser.urlencoded({extended: false});
 
// 读取/mock/login.json中的json数据
var loginData = require("../src/mock/login.json")

/* ====== 要插入的第一段代码结束 ====== */

const HOST = process.env.HOST
const PORT = process.env.PORT && Number(process.env.PORT)

const devWebpackConfig = merge(baseWebpackConfig, {
  /* 。。。 */
  devServer: {
    /* 。。。 */
    watchOptions: {
      poll: config.dev.poll,
    },
    /* ====== 要插入的第二段代码开始 ====== */
    before(app) { // localhost:8080/api/login
      app.post("/api/login",jsonParser, (req, res) => {
        if(!req.body) return res.sendStatus(400);
        res.send(loginData[req.body.name === 'admin' ? 'admin':'other']);
        // res.json(loginData);
      })
    }
    /* ====== 要插入的第二段代码结束 ====== */
  },
  /* 。。。 */
})

执行 npm run dev 命令重启应用,访问 http://localhost:8080/api/login 即可获取到我们定义的Json 数据。

使用Express托管静态文件

如果需要使用Express对外提供诸如图像、CSS 和 JavaScript 之类的静态文件,可以使用 Express 中的 express.static 内置中间件函数。例如,通过如下代码就可以将 public 目录下的图片、CSS 文件、JavaScript 文件对外开放访问了:

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

现在,你就可以访问 public 目录中的所有文件了。

http://localhost:3000/images/logo.png

你也可以为你的资源指定一个虚拟的访问路径,例如:

app.use('/static', express.static('public'))

现在,你就可以通过带有 /static 前缀地址来访问 public 目录中的文件了。

http://localhost:3000/static/images/logo.png

Express 在静态资源文件夹中查找文件,因此,存放静态资源的文件夹的目录名不会出现在 URL 中。如果要使用多个静态资源目录,请多次调用 express.static 中间件函数:

app.use('/public', express.static('public'))
app.use('/files', express.static('files'))

访问静态资源文件时,express.static 中间件函数会根据目录的添加顺序查找所需的文件。

需要注意的是, express.static 函数的 path 参数的路径是相对于express 实例的启动目录来说的,如果你的 express 实例是从其他目录启动的,很有可能会出现传入的path路径找不到的情况,安全一点的做法就是使用绝对路径。

app.use('/static', express.static(path.join(__dirname, 'public')))

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
,注册,获取用户信息,修改用户信息等接口。 1. 登录接口 接口地址:/api/login 请求方式:POST 请求参数: | 参数名 | 类型 | 描述 | | -------- | ------ | ------ | | username | string | 用户名 | | password | string | 密码 | 返回参数: | 参数名 | 类型 | 描述 | | ------ | ------ | -------------------------- | | code | number | 返回码,200表示登录成功 | | msg | string | 返回信息 | | data | object | 登录成功后返回的用户信息 | 示例代码: ``` const express = require('express'); const bodyParser = require('body-parser'); const app = express(); const users = [ { id: 1, username: 'admin', password: '123456', name: '管理员' }, { id: 2, username: 'user1', password: '123456', name: '用户1' }, { id: 3, username: 'user2', password: '123456', name: '用户2' }, ]; app.use(bodyParser.json()); app.post('/api/login', (req, res) => { const { username, password } = req.body; const user = users.find(u => u.username === username && u.password === password); if (user) { res.json({ code: 200, msg: '登录成功', data: { id: user.id, username: user.username, name: user.name, }, }); } else { res.json({ code: 400, msg: '用户名或密码错误', }); } }); app.listen(3000, () => { console.log('Server started on http://localhost:3000'); }); ``` 2. 注册接口 接口地址:/api/register 请求方式:POST 请求参数: | 参数名 | 类型 | 描述 | | -------- | ------ | ------ | | username | string | 用户名 | | password | string | 密码 | | name | string | 姓名 | 返回参数: | 参数名 | 类型 | 描述 | | ------ | ------ | ------------ | | code | number | 返回码,200表示注册成功 | | msg | string | 返回信息 | 示例代码: ``` app.post('/api/register', (req, res) => { const { username, password, name } = req.body; const user = users.find(u => u.username === username); if (user) { res.json({ code: 400, msg: '该用户名已存在', }); } else { const id = users.length + 1; users.push({ id, username, password, name }); res.json({ code: 200, msg: '注册成功', }); } }); ``` 3. 获取用户信息接口 接口地址:/api/user/:id 请求方式:GET 请求参数: | 参数名 | 类型 | 描述 | | ------ | ------ | ------ | | id | number | 用户ID | 返回参数: | 参数名 | 类型 | 描述 | | ------ | ------ | ------------ | | code | number | 返回码,200表示获取成功 | | msg | string | 返回信息 | | data | object | 用户信息 | 示例代码: ``` app.get('/api/user/:id', (req, res) => { const id = parseInt(req.params.id); const user = users.find(u => u.id === id); if (user) { res.json({ code: 200, msg: '获取成功', data: { id: user.id, username: user.username, name: user.name, }, }); } else { res.json({ code: 400, msg: '用户不存在', }); } }); ``` 4. 修改用户信息接口 接口地址:/api/user/:id 请求方式:PUT 请求参数: | 参数名 | 类型 | 描述 | | ------ | ------ | ---------- | | id | number | 用户ID | | name | string | 修改后的姓名 | 返回参数: | 参数名 | 类型 | 描述 | | ------ | ------ | ------------ | | code | number | 返回码,200表示修改成功 | | msg | string | 返回信息 | 示例代码: ``` app.put('/api/user/:id', (req, res) => { const id = parseInt(req.params.id); const user = users.find(u => u.id === id); if (user) { user.name = req.body.name; res.json({ code: 200, msg: '修改成功', }); } else { res.json({ code: 400, msg: '用户不存在', }); } }); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值