nodejs模拟后端返回

nodejs模拟后端返回,第1张

目的:模拟后端对数据的处理,了解服务端

client可以使用fetch或axios发起请求,server可以使用express或koa

可运行代码   GitHub - printlnCout/axios-fetch-demo: 学习fetch与axios与后端的请求

相关介绍

axios: Axios

fetch: Fetch API - Web API 接口参考 | MDN

express: Express - 基于 Node.js 平台的 web 应用开发框架 - Express 中文文档 | Express 中文网

koa: Koa - next generation web framework for node.js

一、请求发起

1. fetch

fetch发起get请求,并在url中携带动态参数与请求参数

const fetchGETConfig = {
  method: 'GET',
  mode: 'cors',
};

fetch('http://localhost:3000/23?name=jake', fetchGETConfig)
  .then(data => data.text())
  .then(res => console.log('fetch: ', res));

fetch发送POST请求并将请求参数放在body中

const paramsBody = {
  name: 'jake',
  age: 26,
};

const fetchConfig = {
  method: 'POST',
  body: JSON.stringify(paramsBody),
  mode: 'cors',
  headers: {
    'Content-Type': 'application/json',
  },
};

fetch('http://localhost:3000/:id', fetchConfig)
  //返回的data是Response类型,调用它上面的json方法返回Promise,解决值为json类型
  .then(data => data.json()) 
  .then(res => console.log('fetch: ', res));

2. axios

修改默认配置

axios.defaults.baseURL = 'http://localhost:3000/';
axios.defaults.timeout = 1000;

发起GET请求

const axiosConfig = {
  method: 'GET',
  url: '/123?name=jake',
};

axios(axiosConfig)
  .then(res => console.log('axios: ', res.data));

发起POST请求

const axiosConfig = {
  method: 'post',
  url: '/123',
  params: {
    ID: 12345
  },
  data: {
    name: 'jake'
  },
};

axios(axiosConfig)
  .then(res => console.log('axios: ', res.data));

二、服务端接受请求并提取信息

1. express

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// 先设置跨域
app.all('*', (req, res, next) => {
  res.header("Access-Control-Allow-Origin", '*');
  res.header("Access-Control-Allow-Method", 'PUT, GET, POST, DELETE, OPTIONS');
  res.header("Access-Control-Allow-Headers", 'X-Requested-With');
  res.header("Access-Control-Allow-Headers", 'Content-Type');
  next();
});

app.listen(3000);

接收GET请求带上的数据

// 通过路由配置相应的执行函数, res.send返回
// 请求url为: http://localhost:3000/23?name=jake
app.get('/:id', (req, res) => {
  res.send({
    query: req.query, // req.query包含请求参数
    params: req.params, // req.params包含动态参数
  });
});

接收POST请求带上的数据

app.post('/:id', (req, res) => {
  res.send({
    query: req.body, // 拿body中的请求参数
    params: req.params, // 拿动态参数
  });
});

koa

const Koa = require('koa');
const bodyParser = require('koa-bodyparser');
const router = require('koa-router')();
const cors = require('koa2-cors');
const app = new Koa();

const main = async (ctx) => {
  ctx.response.body = 'hello';
};

router.get('/:aid', main);

app.use(cors());
app.use(bodyParser());
app.use(router.routes()); // 启动路由

app.listen(3000);

取数据

const main = async (ctx) => {
  console.log(ctx.params);
  console.log(ctx.query);
  console.log(ctx.request.body);
  ctx.response.body = 'dfd'; // 修改response.body会调用set修改返回的状态码及相关信息
};

router.get('/:id', main);

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/928786.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-17
下一篇 2022-05-17

发表评论

登录后才能评论

评论列表(0条)

保存