Node.js 如何在Node Express应用程序的公用文件夹外使用.js文件?

Node.js 如何在Node Express应用程序的公用文件夹外使用.js文件?,node.js,express,handlebars.js,Node.js,Express,Handlebars.js,我是node express的新手,需要一些帮助来解决以下问题 下面是我的Node express应用程序的项目结构 文件夹结构: 下面是我的app.js代码 var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-

我是node express的新手,需要一些帮助来解决以下问题

下面是我的Node express应用程序的项目结构

文件夹结构:

下面是我的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文件,当前位于公用文件夹中(请参见文件夹结构)

我有一个index.hbs文件,它使用controller.js(代码如下所示)


{{title}}
{{{body}}}
当我运行应用程序时,它工作正常

我需要从公用文件夹中删除controller.js文件,并将其转储到controller文件夹中(请参见文件夹结构图),然后当我运行程序时,我得到以下错误

获取404(未找到)

我在index.hbs文件中更改了我的
,这样我就可以运行它而不会出现任何错误,但不会有运气


如果您有任何建议,我们将不胜感激。

您必须以HTML格式提供所有您想要参考的内容

因此,您可以将代码移动到其他目录并提供服务,也可以将其移动到其他服务器,但不能将其移动到任何未提供服务的位置,否则您将无法在HTML中加载它


所有客户端JavaScript代码必须可供客户端下载,否则将无法工作。因此,将其放在公共目录中不仅是可以的,而且是必要的。当然,您可能只想将它提供给一些客户机,但您必须将它提供给使用它的HTML的任何人,而且几乎没有办法解决它。

该控制器文件在做什么?如果这与客户端功能有关,那么将其公开并不重要。否则,您可以在express中设置多个static来解决此问题,但这也可能会使其他文件无法查看,这可能是不可取的。最后,你可以看看像webpack这样的东西,把你所有的JS捆绑成一个捆绑包,然后使用它。好的,在这个特定的点上,controller.JS只使用路由依赖性进行路由。就像你提到的,把它放在公用文件夹里是可以的。但假设这是一个我不想公开的函数。我如何克服这一点??使用网页包??许多感谢你的帮助Jak Hammond许多感谢你的帮助
<!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>