我是一位经验丰富的MEAN堆栈开发人员,我正在对我们公司使用的API进行nodeJS重写,这是使用NGINX在Perl中编写的。我通过简单的节点路由服务登录页面:
app.get('/', function (req, res) {
res.render('/var/www/html/login.html');
});
通过Perl提供此页面时,所有样式表都能正确呈现。但是,当我通过节点提供此文档时,我所有的' hrefs'抛出404:未找到。我的应用程序使用EJS引擎。
我试图引用的文件的绝对路径:
Login: /var/www/html/login.html
Bootstrap Darkly: /var/www/html/bootstrap/css/bootstrap.darkly.css
Jquery: /var/www/html/js/jquery.js
我在login.html中测试了以下四个href位置:
<link href="bootstrap/css/bootstrap.darkly.css" rel="stylesheet" />
<link href="/bootstrap/css/bootstrap.darkly.css" rel="stylesheet" />
<link href="../bootstrap/css/bootstrap.darkly.css" rel="stylesheet" />
<link href="../../bootstrap/css/bootstrap.darkly.css" rel="stylesheet" />
我可以提供社区认为有用的任何其他信息。
任何人都知道我做错了什么?这是在Ubuntu 15.04服务器版本的VM上运行。
此外,这可能与this question有某种关联。
这是我的完整app.js:
var express = require('express');
var http = require('http');
var path = require('path');
var fs = require('fs');
var app = express();
var expressJwt = require('express-jwt');
var jwt = require('jsonwebtoken');
var json = require('json');
var bodyParser = require('body-parser');
var morgan = require('morgan');
process.env.PATH = '/var/www/html/';
// all environments
app.set('port', process.env.PORT || 3000);
//app.set('view engine', 'html');
//app.set('views', path.join(__dirname, '../../'));
app.engine('html', require('ejs').renderFile);
app.all('*', function(req, res, next) {
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header('Access-Control-Allow-Headers', "Origin, X-Requested-With, Content-Type, Accept");
next();
});
// development only
if ('development' == app.get('env')) {
//app.use(express.errorHandler());
}
require('./routes/main.js')(app);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
评论建议我补充说:
app.use(express.static('/var/www/html'));
当这行被添加到app.js文件的顶部时,就在声明之后,浏览器会在http://localhost:3000下载perl脚本。在我看来,这表明在这种情况下NGINX是我的节点服务器的代理。