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

我今天从NodeJS,ExpressJS,Android开始创build一个小的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错误

在这里输入图像描述

我尝试过绝对和相对path。 我也尝试从其他stackoverflow职位的服务sugesstions。 没有结果。

Servercode是由Eclipse IDE创build的“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')); }); 

迈克尔

根据文档 ,当使用这个:

 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_modules中运行node ,并且你有以下的目录结构:

 app-root-directory/ public/ 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'));