[英]How to use an external js-File in Nodejs, ExpressJS
我今天开始使用NodeJS,ExpressJS,Android创建一个小的Web应用程序。 而且我遇到了一个问题,它整天困扰着我!
ENV:
服务器: NodeJS
, ExpressJS
客户端: HTML
, Angular
, CSS
我尝试从node_modules文件夹加载CSS和JavaScript文件。 但这是行不通的。 它仅适用于在线资源
作品
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css">
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js"></script>
<script type="text/javascript" src="../public/javascript/test.js"></script>
不起作用
<script type="text/javascript" src="../public/javascript/test.js"></script>
服务器一直在写404错误
我已经尝试过绝对和相对路径。 我也尝试过其他stackoverflow帖子中的服务器建议。 没有结果。
Servercode是由Eclipse IDE使用“ Express JS Project”创建的
app.js
var express = require('express')
, routes = require('./routes')
, user = require('./routes/user')
, http = require('http')
, path = require('path')
,pageX = require('./routes/pageX');
var app = express();
// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));
// development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}
app.get('/', routes.index);
app.get('/pageX', function(req,res){
console.log("TEST - PageX");
res.send(pageX.pageX(req, res));
});
app.get('/users', user.list);
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
迈克尔
根据docs ,使用时:
app.use(express.static(path.join(__dirname, 'public')));
Express查找相对于静态目录的文件,因此静态目录的名称不是URL的一部分。
因此,要加载您的test.js
您应该使用:
<script type="text/javascript" src="/javascript/test.js"></script>
同样,这意味着您应该在__dirname
下有一个public
目录。
如果我正确理解了您,并且按照您到目前为止说过的话,您正在从node_modules
内部运行node
,并且具有以下目录结构:
app-root-directory/
public/
node_modules/
我对node也很node_modules
,我相信您不应该从node_modules
内部node_modules
。 但是,如果你再path.join(__dirname, 'public')
是不是你想要的,因为它会指向public
里面node_modules
。
因此,您还必须将express.static
的根目录更改为../public
:
app.use(express.static(path.join(__dirname, '../public')));
尝试使用这个。 在我的工作。
var express = require('express');
var app = express();
app.use('/js', express.static(__dirname + '/public/js'));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.