这是我的后台代码
通过POSTMAN测试访问后台方法都能正常使用,而一到前台访问就报404
@RestController
@RequestMapping("/exc")
@CrossOrigin
public class Tb_skuController {
@Autowired
Tb_skuService tbSkuService;
@GetMapping("/showAll")
public Map<String,Object> show(){
List<Tb_sku> list = tbSkuService.showAll();
Map<String,Object> map = new HashMap<>();
map.put("code","0");
map.put("data",list);
return map;
} @PostMapping("/deleteTb/{id}")
public int deleteTb(@PathVariable("id") int id){
return tbSkuService.deleteTb(id);
} @PostMapping("/save")
public int save(Tb_sku tb_sku){
return tbSkuService.save(tb_sku);
} @PostMapping("/update")
public int update(Tb_sku tb_sku){
return tbSkuService.update(tb_sku);
} @PutMapping("/query/{demoReload}")
public Map<String,Object> query(@PathVariable("demoReload") String demoReload){
List<Tb_sku> list = tbSkuService.query(demoReload);
System.out.println(demoReload+"222222222");
Map<String,Object> map = new HashMap<>();
map.put("code","0");
map.put("data",list);
return map;
}
}前台代码
table.render({
elem: '#test'
,url:'/exc/showAll'
,toolbar: '#toolbarDemo'
,title: '学生信息数据表'
,cols: [[
{type: 'checkbox', fixed: 'left'}
,{field:'id', title:'id',fixed: 'left', unresize: true}
,{field:'spu_id', title:'spu_id', edit: 'text'}
,{field:'title', title:'商品标题', edit: 'text'}
,{field:'images', title:'商品图片', edit: 'text'}
,{field:'price', title:'销售单价', edit: 'text'}
,{field:'indexes', title:'下标组合', edit: 'text'}
,{field:'own_spec', title:'键值对', edit: 'text'}
,{field:'enable', title:'是否有效', edit: 'text'}
,{field:'create_time', title:'添加时间', edit: 'text'}
,{field:'last_update_time', title:'最后修改时间', edit: 'text'}
,{fixed: 'right', title:'操作', toolbar: '#barDemo'}
]]
,id:'testReload'
,page: true
});
var $ = layui.$, active = {
reload: function(){
alert($('#demoReload').val())
var demoReload = $('#demoReload').val();
//执行重载
table.reload('testReload', {
url:"/exc/query",
method:"get",
where: {
'demoReload': demoReload
}
});
}
};
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
//头工具栏事件
table.on('toolbar(test)', function(obj){
var checkStatus = table.checkStatus(obj.config.id);
switch(obj.event){
case 'save':
//添加弹出form
layer.open({
type: 1,
shade:0,
content: $("#saveDiv").append(),
id:"alertcenterdiv",
title: '信息处理',
area: ['700px', '500px'], //宽高
cancel: function (index, layero) {
layer.close(index);
$("#saveDiv").css("display", "none");
return false;
}
});
break;
var data = checkStatus.data;
layer.alert(JSON.stringify(data));
break;
case 'getCheckLength':
var data = checkStatus.data;
layer.msg('选中了:'+ data.length + ' 个');
break;
case 'isAll':
layer.msg(checkStatus.isAll ? '全选': '未全选');
break;
};
});
//监听行工具事件
table.on('tool(test)', function(obj){
var data = obj.data;
//console.log(obj)
if(obj.event === 'del'){
layer.confirm('真的删除行么', function(index){
obj.del();
$.ajax({
url:'/exc/deleteTb',
type:'post',
data: {id: data.id},
success: function (msg) {
if (msg == success) {
//删除这一行
alert("成功")
//关闭弹框
layer.close(index);
// layer.msg("删除成功", {icon: 6});
} else {
layer.msg("删除失败", {icon: 5});
}
}
});
layer.close(index);
});
} else if(obj.event === 'edit'){
// layer.prompt({
// formType: 2
// ,value: data.email
// }, function(value, index){
// obj.update({
// email: value
// });
// layer.close(index);
//});
var data = obj.data;
var layEvent = obj.event; // 获得 lay-event 对应的值(也可以是表头的event 参数对应的值)
var tr = obj.tr; // 获得当前行 tr 的DOM对象
alert(form.val('filter','object'))
//修改弹出form
layer.open({
type: 1,
shade:0,
content: $("#editDiv").append(),
id:"alertcenterdiv1",
title: '信息处理',
area: ['400px', '500px'], //宽高
success : function(layero, index) {
//console.log(layero, index);
//console.log(data.subno,data.subname);
//console.log(data.tsex);
alert("编辑");
layer.iframeAuto(index);
$('#id1').val(data.id);
$('#spu_id1').val(data.spu_id);//机会来源
$('#title1').val(data.title);//创建人
$('#images1').val(data.images);
$('#indexes1').val(data.indexes);
$('#price1').val(data.price);
$('#own_spec1').val(data.own_spec);
$('#enable1').val(data.enable);
$('#create_time1').val(data.create_time);
$('#last_update_time1').val(data.last_update_time);
}
});
}
layui.use('form', function(){
var form = layui.form;
//监听提交
form.on('submit(formDemo)', function(data){
layer.msg(JSON.stringify(data.field));
return false;
});
});
});
form.on('submit(btn1)', function(data){
$.ajax({
method:"post",
data:{
spu_id:$("#spu_id").val()
,title:$("#title").val()
,images:$("#images").val()
,price:$("#price").val()
,indexes:$("#indexes").val()
,own_spec:$("#own_spec").val()
,enable:$("#enable").val()
,create_time:$("#create_time").val()
,last_update_time:$("#last_update_time").val()
},
url:'/exc/save',
success:function (data){
var json = eval('(" + data + ")')
if(json){
alert("成功");
window.location.href= "http://localhost:3000/admin.html";
}else{
alert("失败");
}
}
});
return false;
});
form.on('submit(btn2)', function(data){
$.ajax({
method:"post",
data:{
id:$("#id1").val()
,spu_id:$("#spu_id1").val()
,title:$("#title1").val()
,images:$("#images1").val()
,price:$("#price1").val()
,indexes:$("#indexes1").val()
,own_spec:$("#own_spec1").val()
,enable:$("#enable1").val()
,create_time:$("#create_time1").val()
,last_update_time:$("#last_update_time1").val()
},
url:'/exc/update',
success:function (data){
var json = eval('(" + data + ")')
if(json){
alert("成功");
window.location.href= "http://localhost:3000/admin.html";
}else{
alert("失败");
}
}
});
console.log(data.id1,data.spu_id1);
//var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
//parent.layer.close(index); //再执行关闭 //**********************
//parent.location.reload();
return false;
});中间件采用的是nodejs
const http = require('http');
const express = require('express');
const tracer = require('tracer').colorConsole();
const mysql = require("mysql");
const bp = require("body-parser");const app = express();
const db = mysql.createConnection({
host: "localhost"
,port:3306
,database:"goodbase"
,user:"newuser"
,password:"123"
});
db.connect();app.use(bp.urlencoded({extended: true}));
app.use(bp.json());
app.use(express.static("./view"));
//调用应该直接把请求转向给spring-boottracer.info('服务已启动', `http://127.0.0.1:3000`);app.use('/*', function (req, res, next) {
tracer.info('Body', req.body);
next();
});
app.use('/', function (req, res) {
if (req.body) {
tracer.info(req.body);
}
let option = {
hostname: '192.168.55.127',
port: 8081,
path: req.baseUrl + req.path,
method: req.method,
headers: {
'Content-Type': 'application/json',
'charset': 'utf-8',
}
};
let request = http.request(option, (response) => {
response.setEncoding('utf8');
let rawData = '';
response.on('data', (chunk) => {
rawData += chunk;
}).on('end', () => {
console.log(typeof(rawData))
console.log(JSON.parse(rawData))
res.send(rawData) || res.json({message: 'ERROR'});
})
})
request.on('error', (e) => {
tracer.error(e);
})
request.write(JSON.stringify(req.body) + '\n');
request.end();
});
app.listen(3000);
通过POSTMAN测试访问后台方法都能正常使用,而一到前台访问就报404
@RestController
@RequestMapping("/exc")
@CrossOrigin
public class Tb_skuController {
@Autowired
Tb_skuService tbSkuService;
@GetMapping("/showAll")
public Map<String,Object> show(){
List<Tb_sku> list = tbSkuService.showAll();
Map<String,Object> map = new HashMap<>();
map.put("code","0");
map.put("data",list);
return map;
} @PostMapping("/deleteTb/{id}")
public int deleteTb(@PathVariable("id") int id){
return tbSkuService.deleteTb(id);
} @PostMapping("/save")
public int save(Tb_sku tb_sku){
return tbSkuService.save(tb_sku);
} @PostMapping("/update")
public int update(Tb_sku tb_sku){
return tbSkuService.update(tb_sku);
} @PutMapping("/query/{demoReload}")
public Map<String,Object> query(@PathVariable("demoReload") String demoReload){
List<Tb_sku> list = tbSkuService.query(demoReload);
System.out.println(demoReload+"222222222");
Map<String,Object> map = new HashMap<>();
map.put("code","0");
map.put("data",list);
return map;
}
}前台代码
table.render({
elem: '#test'
,url:'/exc/showAll'
,toolbar: '#toolbarDemo'
,title: '学生信息数据表'
,cols: [[
{type: 'checkbox', fixed: 'left'}
,{field:'id', title:'id',fixed: 'left', unresize: true}
,{field:'spu_id', title:'spu_id', edit: 'text'}
,{field:'title', title:'商品标题', edit: 'text'}
,{field:'images', title:'商品图片', edit: 'text'}
,{field:'price', title:'销售单价', edit: 'text'}
,{field:'indexes', title:'下标组合', edit: 'text'}
,{field:'own_spec', title:'键值对', edit: 'text'}
,{field:'enable', title:'是否有效', edit: 'text'}
,{field:'create_time', title:'添加时间', edit: 'text'}
,{field:'last_update_time', title:'最后修改时间', edit: 'text'}
,{fixed: 'right', title:'操作', toolbar: '#barDemo'}
]]
,id:'testReload'
,page: true
});
var $ = layui.$, active = {
reload: function(){
alert($('#demoReload').val())
var demoReload = $('#demoReload').val();
//执行重载
table.reload('testReload', {
url:"/exc/query",
method:"get",
where: {
'demoReload': demoReload
}
});
}
};
$('.demoTable .layui-btn').on('click', function(){
var type = $(this).data('type');
active[type] ? active[type].call(this) : '';
});
//头工具栏事件
table.on('toolbar(test)', function(obj){
var checkStatus = table.checkStatus(obj.config.id);
switch(obj.event){
case 'save':
//添加弹出form
layer.open({
type: 1,
shade:0,
content: $("#saveDiv").append(),
id:"alertcenterdiv",
title: '信息处理',
area: ['700px', '500px'], //宽高
cancel: function (index, layero) {
layer.close(index);
$("#saveDiv").css("display", "none");
return false;
}
});
break;
var data = checkStatus.data;
layer.alert(JSON.stringify(data));
break;
case 'getCheckLength':
var data = checkStatus.data;
layer.msg('选中了:'+ data.length + ' 个');
break;
case 'isAll':
layer.msg(checkStatus.isAll ? '全选': '未全选');
break;
};
});
//监听行工具事件
table.on('tool(test)', function(obj){
var data = obj.data;
//console.log(obj)
if(obj.event === 'del'){
layer.confirm('真的删除行么', function(index){
obj.del();
$.ajax({
url:'/exc/deleteTb',
type:'post',
data: {id: data.id},
success: function (msg) {
if (msg == success) {
//删除这一行
alert("成功")
//关闭弹框
layer.close(index);
// layer.msg("删除成功", {icon: 6});
} else {
layer.msg("删除失败", {icon: 5});
}
}
});
layer.close(index);
});
} else if(obj.event === 'edit'){
// layer.prompt({
// formType: 2
// ,value: data.email
// }, function(value, index){
// obj.update({
// email: value
// });
// layer.close(index);
//});
var data = obj.data;
var layEvent = obj.event; // 获得 lay-event 对应的值(也可以是表头的event 参数对应的值)
var tr = obj.tr; // 获得当前行 tr 的DOM对象
alert(form.val('filter','object'))
//修改弹出form
layer.open({
type: 1,
shade:0,
content: $("#editDiv").append(),
id:"alertcenterdiv1",
title: '信息处理',
area: ['400px', '500px'], //宽高
success : function(layero, index) {
//console.log(layero, index);
//console.log(data.subno,data.subname);
//console.log(data.tsex);
alert("编辑");
layer.iframeAuto(index);
$('#id1').val(data.id);
$('#spu_id1').val(data.spu_id);//机会来源
$('#title1').val(data.title);//创建人
$('#images1').val(data.images);
$('#indexes1').val(data.indexes);
$('#price1').val(data.price);
$('#own_spec1').val(data.own_spec);
$('#enable1').val(data.enable);
$('#create_time1').val(data.create_time);
$('#last_update_time1').val(data.last_update_time);
}
});
}
layui.use('form', function(){
var form = layui.form;
//监听提交
form.on('submit(formDemo)', function(data){
layer.msg(JSON.stringify(data.field));
return false;
});
});
});
form.on('submit(btn1)', function(data){
$.ajax({
method:"post",
data:{
spu_id:$("#spu_id").val()
,title:$("#title").val()
,images:$("#images").val()
,price:$("#price").val()
,indexes:$("#indexes").val()
,own_spec:$("#own_spec").val()
,enable:$("#enable").val()
,create_time:$("#create_time").val()
,last_update_time:$("#last_update_time").val()
},
url:'/exc/save',
success:function (data){
var json = eval('(" + data + ")')
if(json){
alert("成功");
window.location.href= "http://localhost:3000/admin.html";
}else{
alert("失败");
}
}
});
return false;
});
form.on('submit(btn2)', function(data){
$.ajax({
method:"post",
data:{
id:$("#id1").val()
,spu_id:$("#spu_id1").val()
,title:$("#title1").val()
,images:$("#images1").val()
,price:$("#price1").val()
,indexes:$("#indexes1").val()
,own_spec:$("#own_spec1").val()
,enable:$("#enable1").val()
,create_time:$("#create_time1").val()
,last_update_time:$("#last_update_time1").val()
},
url:'/exc/update',
success:function (data){
var json = eval('(" + data + ")')
if(json){
alert("成功");
window.location.href= "http://localhost:3000/admin.html";
}else{
alert("失败");
}
}
});
console.log(data.id1,data.spu_id1);
//var index = parent.layer.getFrameIndex(window.name); //先得到当前iframe层的索引
//parent.layer.close(index); //再执行关闭 //**********************
//parent.location.reload();
return false;
});中间件采用的是nodejs
const http = require('http');
const express = require('express');
const tracer = require('tracer').colorConsole();
const mysql = require("mysql");
const bp = require("body-parser");const app = express();
const db = mysql.createConnection({
host: "localhost"
,port:3306
,database:"goodbase"
,user:"newuser"
,password:"123"
});
db.connect();app.use(bp.urlencoded({extended: true}));
app.use(bp.json());
app.use(express.static("./view"));
//调用应该直接把请求转向给spring-boottracer.info('服务已启动', `http://127.0.0.1:3000`);app.use('/*', function (req, res, next) {
tracer.info('Body', req.body);
next();
});
app.use('/', function (req, res) {
if (req.body) {
tracer.info(req.body);
}
let option = {
hostname: '192.168.55.127',
port: 8081,
path: req.baseUrl + req.path,
method: req.method,
headers: {
'Content-Type': 'application/json',
'charset': 'utf-8',
}
};
let request = http.request(option, (response) => {
response.setEncoding('utf8');
let rawData = '';
response.on('data', (chunk) => {
rawData += chunk;
}).on('end', () => {
console.log(typeof(rawData))
console.log(JSON.parse(rawData))
res.send(rawData) || res.json({message: 'ERROR'});
})
})
request.on('error', (e) => {
tracer.error(e);
})
request.write(JSON.stringify(req.body) + '\n');
request.end();
});
app.listen(3000);
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货