如何在Nodejs,ExpressJS中使用外部js-File

时间:2016-01-05 18:07:30

标签: angularjs node.js express

我今天开始使用NodeJS,ExpressJS,Android来创建一个小的Web应用程序。我遇到了一个问题,它让我整整一天!

ENV:

服务器:NodeJSExpressJS

客户:HTMLAngularCSS

我尝试从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错误

enter image description here

我尝试过absolut和relativ路径。 我也尝试过来自其他stackoverflow帖子的几个sugesstions。没有结果。

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'));
});

迈克尔

2 个答案:

答案 0 :(得分:1)

根据docs,使用时:

app.use(express.static(path.join(__dirname, 'public')));
  

Express查找相对于静态目录的文件,因此静态目录的名称不是URL的一部分。

因此,要加载test.js,您应该使用:

<script type="text/javascript" src="/javascript/test.js"></script>

此外,这意味着您应在public下有一个__dirname目录。

如果我理解正确,并且从您所说的到目前为止已经尝试过,那么您正在node内运行node_modules并且您具有以下目录结构:

app-root-directory/
    public/
    node_modules/

我对节点也很陌生,我相信你不应该从node_modules内部运行。但是如果你那么path.join(__dirname, 'public')不是你想要的,因为它会指向public内的node_modules

因此,您还必须将express.static的根目录更改为../public

app.use(express.static(path.join(__dirname, '../public')));

答案 1 :(得分:0)

尝试使用这个。我的工作结束了。

var express = require('express');
var app = express();
app.use('/js', express.static(__dirname + '/public/js'));