2017-03-02 9 views
0

私はノードエクスプレスを初めて使用しており、以下の解決に役立ついくつかの助けが必要です。以下はNode Express Appのパブリックフォルダの外にある.jsファイルの使用方法?

ノードのための私のプロジェクト構造であるアプリケーション

フォルダ構造を表す:以下

1

は私app.jsコード

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var index = require('./routes/index'); 
var users = require('./routes/users'); 

var app = express(); 
// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'hbs'); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', index); 
app.use('/users', users); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 

module.exports = app; 

である私はcontroller.jsファイルを持っています現在パブリックフォルダに存在する(フォルダ構造を参照)

私はこれが正常に動作するアプリケーションを実行すると、私はcontroller.jsを使用していますindex.hbsファイル(コードは、以下に示す)

<!DOCTYPE html> 
<html ng-app="test"> 
    <head> 
    <title>{{title}}</title> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.2/angular.min.js"></script> 
     <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.7/angular-route.min.js"></script> 
     <script src="controller.js"></script> 
    <link rel='stylesheet' href='/stylesheets/style.css' /> 
    </head> 
    <body ng-app="test"> 
    {{{body}}} 
    <!-- 
    <div ng-view></div> 
    --> 
    </body> 
</html> 

を持っています。

私は、パブリックフォルダからcontroller.jsファイルを削除して、コントローラのフォルダにそれをダンプする必要があります(フォルダ構造の画像を参照)、私はプログラムを実行すると、私は以下のエラーを取得し、

は(http://localhost:3000/controller.js 404をGET見つからない)

私はindex.hbsファイルの中で私の<script src="controller.js"></script>を非常に多くの方法で変更しました。私は何のエラーもなく運行することができます。

ご提案いただければ幸いです。

+0

コントローラファイルとは何ですか?クライアント側の機能と何らかの関係がある場合は、それを公開することは重要ではありません。それ以外の場合は、問題を解決するために複数の静的変数を設定することができますが、望ましくない可能性のある他のファイルも表示される可能性があります。最後に、webpackのようなものを見て、すべてのJSを1つのバンドルにバンドルしてから使用することができます。 –

+0

まあ、この特定のポイントでは、controller.jsは角度ngRoute依存性を使用するルーティングだけを行います。あなたが言ったように、それはパブリックフォルダに残すことです。しかし、それは私が一般に公開したくない機能のようなものだとしましょう。どのように私はそれを克服するのですか?ウェブパックを使用しますか? –

+0

https://blog.madewithlove.be/post/webpack-your-bags/助けてください:) –

答えて

0

HTMLで参照したいものすべてを提供する必要があります。

コードを別のディレクトリに移動して配信することもできます。別のディレクトリに移動することはできますが、配信できない場所に移動することはできません。 HTMLで読み込みます。

クライアント側のJavaScriptコードは、クライアントがダウンロードできるものである必要があります。そうでないと動作しません。だから公のディレクトリに置いてもいいだけではありません。それは必要です。もちろん、クライアントの一部にしかサービスを提供したくないかもしれませんが、それを使用するHTMLを取得した人にはサービスを提供しなければなりません。

+0

あなたの助けrespのための多くのThnaks :) –

関連する問題