当前位置: 首页 > 面试题库 >

如何在不使用yeoman的情况下使用Node.js在Heroku中托管AngularJS应用程序?

萧德馨
2023-03-14
问题内容

我正在尝试使用Node.js将带有AngularJS的Hello World构建推送到Heroku中。但是有多个视图(局部)。

我首先不使用ngRoute部署了Hello
World,这意味着:没有局部。很好,很顺利。然后,我尝试推送2个简单的局部。但我认为问题在于托管应用程序,同时要求提供部分内容。我知道这不是正确的方法,我需要您的建议。

这是我的index.html:

<!DOCTYPE html>
<html ng-app="main">
<head>
    <meta name="name" content="something">
    <title></title>
</head>
<body>
    <section ng-view=""></section>
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular-route.min.js" type="text/javascript" charset="utf-8"></script>

    <script type="text/javascript" charset="utf-8">
    angular.module('main', ['ngRoute'])
    .config(['$routeProvider', '$http', function ($routeProvider, $http){
        console.log('hola');
        $routeProvider
        .when('/', {
            resolve: **??? I tried with templateUrl but did not work either**
            ,controller: 'indexCtrl'
        })
        .when('/second', {
            resolve: **???**
            ,controller: 'secondCtrl'
        })
        .otherwise({
            redirectTo: '/'
        });
    }])
    .controller('indexCtrl', ['$scope', function ($scope){
        $scope.helloWorld = "Hello World";
    }])
    .controller('secondCtrl', ['$scope', function ($scope){
        $scope.helloWorld = "World Hello";
    }]);
    </script>
</body>
</html>

部分“ templates / second.html”

<h1>{{ helloWorld }}<h1>
<a href="#/" title="">Go to First</a>

部分“ templates / index.html”

<h1>{{ helloWorld }}<h1>
<a href="#/second" title="">Go to Second</a>

我的快递应用:

var express = require("express'),
app = express();
app.set('view engine', 'html');
app.get('/', function(req, res) {
    res.sendfile('index.html', {root: __dirname })
});
app.get('/index', function (req, res){
    res.sendfile('templates/index.html', {root: __dirname })
});
app.get('/second', function (req, res){
    res.sendfile('templates/second.html', {root: __dirname })
});
var server = app.listen(process.env.PORT || 80);

显然,Procfile:

web: node index.js

到目前为止,我发现的所有教程都使用Yeoman,但我不想使用Yeoman或其他任何脚手架(如果是的话)工具。

问:是否可以在我存储部分的同一Heroku应用程序中托管AngularJS应用程序?如果是这样,我在做什么错?如果没有,最好的方法是什么?


问题答案:

好吧,我不知道为什么我要投反对票。但是无论如何,我在看这个例子时发现了自己的问题。

实际的问题是我没有使用express将目录设为“ public”:

app.use(express.static(__dirname));

这是你好世界

index.html

<!DOCTYPE html>
<html ng-app="main">
<head>
    <meta name="name" content="something">
    <title></title>
</head>
<body>
    <section ng-view=""></section>
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular.min.js" type="text/javascript" charset="utf-8"></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.3/angular-route.min.js" type="text/javascript" charset="utf-8"></script>

    <script type="text/javascript" charset="utf-8">
    angular.module('main', ['ngRoute'])
    .config(['$routeProvider', function ($routeProvider){
        console.log('hola');
        $routeProvider
        .when('/', {
            templateUrl: 'templates/index.html'
            ,controller: 'indexCtrl'
        })
        .when('/second', {
            templateUrl: 'templates/second.html'
            ,controller: 'secondCtrl'
        })
        .otherwise({
            redirectTo: '/'
        });
    }])
    .controller('indexCtrl', ['$scope', function ($scope){
        $scope.helloWorld = "Hello World";
    }])
    .controller('secondCtrl', ['$scope', function ($scope){
        $scope.helloWorld = "World Hello";
    }]);
    </script>
</body>
</html>

服务器/ index.js

var express = require('express'),
app = express();

app.use(express.static(__dirname));
app.get('/', function(req, res) {
    res.sendfile('index.html', {root: __dirname })
});
var server = app.listen(process.env.PORT || 80);

程序文件

web: node index.js

templates / index.html

<h1>{{ helloWorld }}<h1>
<a href="#/second" title="">Go to Second</a>

templates / second.html

<h1>{{ helloWorld }}<h1>
<a href="#/" title="">Go to First</a>

我希望这可以帮助别人。

回答我的问题。是的,有可能,我做错了是没有使模板(文件)可访问。如果要对可访问内容进行额外的安全保护,则可以创建一个名为public的文件夹。然后将该目录设为静态:

app.use(express.static(__dirname + "/public'));

那么您还可以使用不同的路由来与您的应用程序进行通信,甚至可以是RESTful。喜欢:

app.get('/users', function(req, res) {
    res.json({...});
});


 类似资料:
  • 问题内容: 我是Node的新手,并创建了一个其中包含一些async / await语法的应用程序,如下所示: 它在我的机器上可以正常工作,但是当我部署到Heroku时,由于不支持语法而出现错误: 使Heroku支持此语法的最简单方法是什么? 问题答案: 指定要在package.json中使用的节点版本:https : //devcenter.heroku.com/articles/nodejs-s

  • 通常,如果我必须在Spring中注入服务,我会使用 和

  • 问题内容: 我用的是需要挂钩的BabelJS(原名6to5)与运行节点的应用程序es6features: 我打电话来运行我的 app.js6 。我需要安装BabelJS并为我想使用es6features的每个项目提供一个 run.js。 我希望打个电话。如何独立实现该系统(Unix和Windows)? 问题答案: 将and (又名ES6)依赖项添加到应用程序的package.json文件中,并定义

  • 问题内容: 我想实现一个可以使用flask-script停止flask应用程序的命令。我已经搜索了一段时间。因为该框架不提供“ app.stop()” API,所以我对如何编写此代码感到好奇。我正在使用Ubuntu 12.10和Python 2.7.3。 问题答案: 如果仅在桌面上运行服务器,则可以公开终结点以终止服务器: 这是另一种包含更多的方法: 让我知道是否有帮助。

  • 问题内容: 如何在Java程序中打开和关闭调试?如何在不重新编译Java程序的情况下打开和关闭调试? 问题答案: 无需使用IDE进行调试 1)您可以使用Assertions编写Java程序。您随时可以启用/禁用它们。 2)您可以使用配置了log4j.properties的日志。在Java程序中,您可以随时指定信息和调试日志,只要您想显示调试或信息日志等信息,就可以在log4j.properties

  • 问题内容: Struts,Spring和其他一些框架实现了MVC体系结构,以将信息的表示形式与用户与之的交互分开。 任何人都可以在Java EE中解释或给我链接吗? 在不使用框架的情况下,如何创建MVC应用程序以及为此需要哪些设计模式? 问题答案: 看一下这个演示文稿,它是http://www.coreservlets.com/上的Beginning&Intermediate Servlet&JS