2016-01-05 3 views
1

Я начал сегодня с NodeJS, ExpressJS, Android, чтобы создать небольшое веб-приложение. И я столкнулся с проблемой, и это держит меня целый день!Как использовать внешний js-файл в Nodejs, ExpressJS

ENV:

Сервер: NodeJS, ExpressJS

Клиент: HTML, Angular, CSS

Я пытаюсь загрузить CSS и файл JavaScript из папки node_modules. Но это не сработает. Он работает только с онлайн-источников

работает

<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

Я пробовал с абсолютной и релятивистской дорогой. Я пробовал также с serveral sugesstions из других сообщений stackoverflow. без результата.

ServerCode был создан Eclipse IDE с 'Экспресс-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')); 
}); 

Майкл

+0

может попытаться изменить 'http.createServer (приложение) .listen (...)' 'с app.listen (порт, функция() { console.log ('прослушивает порт:' + порт); }); ' –

+0

это фрагмент из моего исходного исходного кода' 'use strict '; var express = require ('express'); var app = express(); var config = require ('./ config'); app.use (функция (req, res, next) { console.log ('% s% s', req.method, req.url); next(); }); app.use ('/ uploads', express.static (__ dirname + '/ uploads')); app.listen (config.port, function() { console.log ('Прослушивание порта' + config.port); }); ' –

+0

@GurbakhshishSingh: благодарю вас за быстрый ответ, он не работает Работа. когда я пытаюсь вызвать funcion в общей папке, я получаю 500 ошибок все время. :( –

ответ

1

Согласно docs, при использовании этого:

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

Экспресс ищет файлы относительно статического каталога, поэтому имя статического каталога не является частью 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'))); 
0

Попробуйте использовать этот. Работал с моей стороны.

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