nginx加载本地静态文件html内ajax请求动态url转发到node拿到本地json文件后无法在浏览器端显示。
老大让我搞一个前后端分离方案,我就想到了用nginx加载静态html资源,动态url请求转发到nodejs处理,完事后发现nodejs可以拿到本地的json文件但是无法输出到浏览器,而且第一次是成功了的,过了一段时间再来跑一遍就发现浏览器无法跨域拿到文件了,搞不懂以前可以怎么现在不可以了???
我的html代码:
前后端分离测试var host = 'http://localhost:8000';
$('#img').click(function(){
$.ajax({
url : host + "/src/word.json",
type : 'post',
data : {},
dataType : 'json',
success : function(res){
var res = JSON.stringify(res)
$('body').append('成功获取数据!'+res+'')
}
})
})
我的nginx配置:
server {
listen 8000;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root "D:/Program Files/nodejs/app/qianHouDuanFenLi";
index index.html index.htm;
expires -1;
}
location ~/src/.* {
proxy_pass http://127.0.0.1:3000;
}
ajax请求url为8000端口的资源,nginx收到请求后转发现符合/src/规则便转发请求到3000端口,这时候就交给nodejs处理,node代码如下:
var http = require('http');
var url = require('url');
var router = require('./router')
http.createServer(function(req,res){
if(req.url !== '/favicon.ico'){
var pathname = url.parse(req.url).pathname;
pathname = pathname.replace(/\//,'');
optname = pathname.split('/')[0];
filename = pathname.split('/')[1];
router[optname](res,filename);
}
}).listen(3000)
console.log(222)
//读取本地文件
var fs = require('fs');
module.exports = {
read_file : function(path,cb){
fs.readFile(path,function(err,data){
if(err)
console.log(err);
else
cb(data);
console.log(data);
})
console.log('读取完毕');
}
}
//输出到浏览器
var readData = require('./readData');
function getReacall(res){
function recall(data){
res.writeHead(200,{"Content-Type":"text/html"});
res.write(data);
res.end('');
}
return recall;
}
module.exports = {
src : function(res,filename){
var recall = getReacall(res);
readData.read_file('../src/'+filename,recall);
}
}
最后控制台可以输出json文件,但是到浏览器上就报这个错:
这要怎么解决?不想用jsonp也不想用设置请求头有办法解决吗?第一次提问求大神解答!
相关阅读:
React初学关于组件数据传递方面的一点疑惑?
网页分享到微信
webpack打包时postcss-px2rem为什么不能解析vue模板内的sass?
vue 2.0 的入门和文档从哪里看?
如何查看图片的 gof大小?
IOS七牛上传错误码-2是什么意思啊,每次上传都出这样的错误
如何获取滚动按钮到底部的距离
数据库字段命名问题,新人,求解
Windows Flask服务器程序关闭了之后,端口仍然偶尔出现处于监听状态
写代码时变量、函数的命名总是在为后续维护的人考虑 肿莫破....
如图,java 在判断的时候,既然不等于null,为什么还要判断size大于0?不等于null肯定大于0呀?
Android WebView中的Ajax操作能统一使用WebView设置的header吗?
如何等距离排列div?
关于node bluebird promise then 的使用
vue有封装了get和post方法吗?是jq的$.get()这个,不是匹配路由
git add . 了,发现里面有一个不想要提交的文件夹,怎么移除add的目录?
微信开发上传图文消息内的图片(只返回图片URL),报错41005 缺少多媒体文件数据?(已解决)
webpack2 css打包问题
echarts怎么去掉坐标线条吗?
请问这题如何解?