static静态文件目录及搭建express服务器心得

这两天在做一个Vue全家桶项目,是一个收银系统的项目。 在使用axios时,有一些个人心得,在这记录一下。

项目中的需求是这样: 使用axios发起异步请求,等待对方返回指定的json文件,json文件中放着我自己写的一些Object。 由于我暂时没有搭建传数据的云服务器,所以打算在本机放json文件进行调试。

我前后尝试了两种 方法:

  1. 放在项目目录下的static文件夹,使用axios获取。
  2. 使用express搭建了一个本地服务器,在服务器下暴露static文件夹,对服务器地址访问获取这个json文件。

目录下使用Axios获取

我的这两个json文件名叫 hotItem.jsontypeItem.json ,把json文件放入项目目录下的static文件夹里。 然后在你要请求的vue模板中的script标签下,导入axios包并写入这个路径。

js 复制代码
import axios from "axios";
export default {
  name: "pos",
  data() {
    return {
      hotItem: [],
      typeItem: []
    };
  },
  created() {
    const _this = this;
    axios
      .get("../../static/hotItems.json")
      .then(res => {
        _this.hotItem = res.data;
      })
      .catch(error => {
        console.log(error);
      });
    axios
      .get("../../static/typeItems.json")
      .then(res => {
        _this.typeItem = res.data;
      })
      .catch(error => {
        console.log(error);
      });
  },

我是在元素创建好后就发送这个请求,所以写在了created钩子里面。 这个文件名最好统一一下,data中的 hotItemtypeItem 不带s,但是我json文件又带了,不细心就可能出错。 路径也要注意,如果没写好,就访问不到文件了。 完成以后,我们可以使用npm run dev命令运行项目,这时它会跑在http://localhost:8080这个地址上,打开就发现成功了。 注意:此方法只在开发时可行,项目打包后由于同源政策的限制,它没有访问本地目录下的这样一个协议,所以无法跨域访问。

使用express搭建服务器访问

由于上面提到的同源政策的限制,在一番寻找答案过后,我决定在本地搭建一个服务器来模拟请求和响应的过程。 使用express,这里是官方文档给的快速上手教程,还挺简单的。 安装express到环境中以后,复制这段代码到我们建立的目录下新建一个index.js文件中。

js 复制代码
const express = require('express')
const app = express()
const port = 3000

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

app.listen(port, () => {
  console.log(`Example app listening at http://localhost:${port}`)
})

然后我们需要把json文件拷贝到static目录下,再对app.js添加如下代码,这段代码应该放在port = 3000app.listen之间。

js 复制代码
const path = require('path');

app.use(function (req, res, next) {
  res.setHeader('Access-Control-Allow-Origin', '*');
  next()
})
app.use(express.static(path.resolve(__dirname, './static')));

这段代码就是一个中间件,它可以对每一个发来的请求和对应的响应进行处理,比如我们要在这里处理的跨域问题。 加一个头选项:Access-Control-Allow-Origin 然后next()放行请求。

之后修改我们原来axios请求的地址。

js 复制代码
axios
      .get("http://localhost:3000/hotItem.json")
      .then(res => {
        _this.hotItem = res.data;
      })
      .catch(error => {
        console.log(error);
      });
    axios
      .get("http://localhost:3000/typeItem.json")
      .then(res => {
        _this.typeItem = res.data;
      })
      .catch(error => {
        console.log(error);
      });

再访问就OK了。

通过这次项目,我还是学到了不少东西,但是还是认识到,有些知识点还需要继续学习,主要是element-ui,打包工具,express服务端这些,继续加油吧。

相关推荐
掘金安东尼8 小时前
让 JavaScript 更容易「善后」的新能力
前端·javascript·面试
掘金安东尼8 小时前
用 HTMX 为 React Data Grid 加速实时更新
前端·javascript·面试
灵感__idea10 小时前
Hello 算法:众里寻她千“百度”
前端·javascript·算法
yinuo11 小时前
轻松接入大语言模型API -04
前端
袋鼠云数栈UED团队11 小时前
基于 Lexical 实现变量输入编辑器
前端·javascript·架构
cipher12 小时前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
UrbanJazzerati12 小时前
非常友好的Vue 3 生命周期详解
前端·面试
AAA阿giao12 小时前
从零构建一个现代登录页:深入解析 Tailwind CSS + Vite + Lucide React 的完整技术栈
前端·css·react.js
兆子龙13 小时前
像 React Hook 一样「自动触发」:用 Git Hook 拦住忘删的测试代码与其它翻车现场
前端·架构
兆子龙13 小时前
用 Auto.js 实现挂机脚本:从找图点击到循环自动化
前端·架构