【问题标题】:Angular only works if I specify app.get("*"[...]); in my server.jsAngular 仅在我指定 app.get("*"[...]); 时才有效在我的 server.js 中
【发布时间】:2018-04-30 21:51:54
【问题描述】:

我刚开始使用服务器端 JavaScript 进行开发,这是我的第一个项目。

它是我自己的云服务器的命令和控制服务器,使用 Angular、Expressjs 和引导程序运行。目前我在添加停止服务器按钮的功能时遇到了麻烦。

它应该有一些代码通过ssh 登录到服务器并做所有必要的事情来优雅地关闭它。

问题是,我真的不能(也不想)通过浏览器脚本添加它,因为我想使用 ssh 库。通过按下按钮来运行服务器端脚本似乎根本不可能(请告诉我无论如何,这将是我所有问题的解决方案:))。

所以我想我可以在用户单击按钮并在 app.get 回调函数中执行操作时将其重定向到 /on 页面。这就是问题所在:在我的server.js(主节点服务器)中,我现在定义了“两个”端点

app.get("*", (req, res) =>{
  res.sendFile(path.join(__dirname, "src/index.html"));
});

app.get("/on", (req, res) =>{
  console.log("redirecting...");
  //DO SOMETHING
  res.redirect("/");
});

在第二个中,我想执行 ssh 操作。 但是当我将第一个代码块更改为(注意 / 而不是 *)

app.get("/", (req, res) =>{
  res.sendFile(path.join(__dirname, "src/index.html"));
});

整个应用似乎不再有棱角。所有角度组件都会显示,但它们只是空的,没有填充我在 app.component.html 中定义的内容。为什么会发生这种情况,我该如何解决?感谢您的任何帮助 ;) PS:所有代码都可以在:GitHub

【问题讨论】:

    标签: javascript node.js angular typescript express


    【解决方案1】:

    有很多事情你最好做,但为了让答案简短,你需要做一些改变,这样你就可以让它运行起来,首先,app.get("*", ...) 重定向每个 get 到那个代码块,所以你需要做这个:

    //Parsers
    app.use(bodyParser.json());
    app.use(bodyParser.urlencoded({extended: false}));
    
    //Angular DIST output folder
    app.use(express.static(path.join(__dirname, "dist")));
    
    
    app.get("/", (req, res) =>{
      res.sendFile(path.join(__dirname, "dist/index.html"));
    });
    
    app.get("/on", (req, res) =>{
      console.log("redirecting...");
      //DO SOMETHING
      res.redirect("/");
    });
    

    注意一个变化,你不想调用 src/index,你想构建 angular 到 dist 文件夹并使用那个 index.html,第二,路由“/”将重定向到主页,“ /on" 现在将输入所需的端点。如果这几乎是你想对端点做的所有事情,我想这很好,但如果你想构建更复杂的东西,我会把事情抽象出来。希望这会有所帮助,干杯。

    【讨论】:

    • 不能正常工作...(相同的结果)。 dist 文件夹中也没有似乎与 app.component 有任何关系的文件
    • 这很奇怪,我刚刚克隆了你的 repo,安装,进行了这些更改并且一切正常(我调试并进入了我的断点)。
    • 您不会在 dist 文件夹中看到的 app.component,当您执行 ng build --aot --prod 时,它会将 typescript 编译为 javascript,您只会看到一些捆绑的(最好是)缩小的 javascript 文件包含您编写的所有代码。我会将图片发布到我的答案中,其中包含我在 github 上对您的项目所做的所有更改...
    • 当您进行这些更改时,您执行 npm run-script build(ng build --aot --prod),然后只需从根文件夹执行 node server.js
    • 完美运行!我只是使用没有--aot 和--prod 的ng build。有了这些,它就可以工作了(虽然我不知道他们做了什么,但那只是一个谷歌查询)。谢谢!:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-19
    • 1970-01-01
    • 2016-05-19
    • 2019-11-15
    • 1970-01-01
    相关资源
    最近更新 更多