前端项目上线

315 阅读4分钟

前端利用项目上线就是要用nodejs开启静态服务器资源,使服务启动起来,就像我们在vscode中运行了项目的代码,会有一个访问的地址像http://localhost:8080这样的地址, 而我们要用nodejs开启静态服务有以下一些步骤,再之后就需要设置防火墙和安全组,其目的是让别人能够访问你的项目

1.打包前将模式修改为历史模式

const router = new VueRouter({
    mode : 'history',//history 模式路径就没有#号
    routes,
});
export default router;

2.修改请求方式

//对axios进行二次封装
import axios from "axios";
const request = axios.create({
// 请求配置参考: https://github.com/axios/axios#request‐config
// 根据不同环境设置 baseURL, 最终发送请求时的URL为: baseURL + 发送请求时写URL ,
// 比如 get('/test'), 最终发送请求是: /dev‐api/test
// baseURL: '/dev‐api',
    baseURL: "http://120.76.247.5:2002", //改成你的node接口
    timeout: 5000, // 请求超时
});

export default request; // 导出 axios 对象

3.打包项目

npm run build

4.开启静态资源服务器

1.创建server.js文件,server.js文件的实现方式有以下两个方式:

2.安装supervisor到全局npm i supervisor -g

3.安装server.js开启静态服务所需的依赖到项目的文件夹里面去,例如:express等等依赖。

4.执行supervisor server.js

方案一:用原生模块实现

let express = require("express");
let fs = require("fs");
let path = require("path");
//实例化
let app = express();
//开启静态资源服务器
app.use(express.static("./"));
//哈希 hash模式:带#号,history模式:不带#号(上线之后,刷新页面就会丢失主页)
//下面的代码是解决history模式刷新页面就会丢失主页问题的
app.use((req, res) => {
// 任何的请求返回index.html的内容
fs.readFile(path.resolve(__dirname, "index.html"), (err, data) => {
    res.set("Content‐Type", "text/html; charset=utf‐8");
    res.send(data);
    });
});
//开启服务 端口号:1000‐60000
app.listen(3001, () => {
    console.log("服务器已开启,请访问:http://localhost:3001");
});

方案二:用插件 connect­history­api­fallback解决

var history = require('connect‐history‐api‐fallback');
let express = require("express");
//实例化
let app = express();
//开启静态资源服务器6 app.use(express.static("./"));
app.use(history());
//开启服务 端口号:1000‐60000
app.listen(3001, () => {
    console.log("服务器已开启,请访问:http://localhost:3001");
});

5.接口的跨域处理­cors设置­主路由文件配置

//希望在这里查询数据,返回给前端,叫做路由 :主路由
const express = require('express');
const Router = express.Router(); //Router==app
//引入子路由
const projectRouter = require('./module/project');
// const uploadRouter = require('./module/upload');
const userRouter = require('./module/user');
//真实接口:有语义的 获取数据:get 提交数据:post 修改数据:put 删除数据:delete restful接口规范
/*
商品信息管理:
订单管理:
商品管理:
入库出库管理:
*/
Router.use((req, res, next) => {
    res.header("Access‐Control‐Allow‐Origin", "http://localhost:3001");
    res.header("Access‐Control‐Allow‐Headers","Content‐Type,Content‐Length, Authorization,Accept,X‐Requested‐With"
    res.header("Access‐Control‐Allow‐Methods","PUT,PATCH,POST,GET,DELETE,OPTIONS"
    next();
})
//子路由的选择
Router.use('/project', projectRouter);
// Router.use('/upload', uploadRouter);
Router.use('/user', userRouter);
module.exports = Router; //导出路由对象

6.设置防火墙和安全组

1.防火墙设置

控制面板>系统和安全>Windows Defender防火墙>高级设置>入站规则>新建规则-选择端口

image.png 这里注意,只需要开放前端的端口,因为我们只需要把前端给别人看,然后直接下一步,再取一个名字就好了,到这里这个防火墙就设置好了。

注:如果上面报错“打开高级安全Windows防火墙管理单元时出错” 则可以参考下面这篇文章 social.technet.microsoft.com/Forums/offi…

查看服务器端口是否开放成功cmd输入netstat -ano更多可以参考: 15dun.com/news/457.ht…

2.安全组设置

更多>网络和安全组>安全组配置>配置规则,检查是否有开放3001端口,如果没有开放则复制一份开放一下3001端口,然后保存就好了。

image.png

注意:腾讯云客服原话: 您好,安全组和服务器需要在同一个地域才支持关联。另外轻量应用服务器不支持关联安全组,如果轻量应用服务器需要设置安全组的功能,请到控制台轻量应用服务的详情页中设置防火墙。

image.png

7.绑定域名

解析绑定域名到ip地址,一般购买域名需要备案,备案可能需要两个星期的时间,建议用ip地址访问就行了

8.访问

一定要记着是用公网去访问,用内网是访问不通的。