今天在学习node.js中Express模块的时候,自己做了一个简单的页面,配合着mongodb数据库,我通过express从mongodb读取数据库然后通过ejs模板引擎宣传出来后,发现css和js等静态文件无法处理,我检查了一番,nginx中并没有禁止对它们的访问,同时代码中也配置了静态文件访问目录,也没有任何的问题,况且在本地测试没有问题,但是上传到服务器并通过nginx代理后发现就有问题了,也不知道为什么,代码如下:
var express = require('express'); var path = require('path'); var ejs = require('ejs'), app = express(), var http = require('http'); app.listen(1818); //设置值 app.disable('strict routing'); //禁用那些功能 app.set('view engine', 'ejs') app.set('views', path.join(__dirname, 'views')); app.engine('ejs', require('ejs').__express); //为ejs扩展名注册EJS,如果使用html扩展名进行注册EJS,那么使用下面的方法 //app.engine('html', require('ejs').renderFile) //此方法使用html扩展名进行注册EJS //设置静态文件目录 app.use(express.static(path.join(__dirname, 'public'))); app.get('/', function(req, res){ //这里是处理函数 });
然后我通过nginx将绑定域名的80端口代理到1818端口,重启Nginx和启动node.js文件,发现访问页面尽然对静态文件没能有效,我猜测一定是node.js的问题。
然后百度了许久,大多数还是用的直接通过nginx来处理静态文件,将node.js处理静态文件进行劫持后直接由nginx来处理,于是找到一篇大致是这样解决的:
一、在nginx配置文件中拦截node.js对静态的处理
location ~ ^/(images/|img/|javascript/|js/|css/|stylesheets/|flash/|media/|static/|robots.txt|humans.txt| favicon.ico){ root /data/wwwroot/node.webzhi.cn; access_log off; expires max; }
大致意思是拦截一下类型的静态文件或文本(个人理解,可能有误)
二、然后将node.js中处理的静态文件均注释
三、在模板中直接添加相对路径即可
当然,如果你们有更好的办法可以留言或者邮箱给我,万分感谢。
评论前必须登录!
注册