node.js – 如何在同一个端口4200上运行angular 4 app和nodejs api进行生产和开发?

前端之家收集整理的这篇文章主要介绍了node.js – 如何在同一个端口4200上运行angular 4 app和nodejs api进行生产和开发?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了angular 4应用程序,我可以使用ng serve –open运行它,它运行在localhost:4200,
我想要的是我也在同一个角度项目中使用nodejs创建了api现在我想在localhost运行该API:4200 / api所以我尝试了类似这样的东西

我的angular 4和nodejs srtucture看起来像这样

/dist
/server
  /routes
  /server
/src
app.js
package.json

在app.js我用过

app.use(express.static(path.join(__dirname,'dist')));
app.use('/app/api',apiRoutes);
const port = process.env.PORT || '3000';
server.listen(port,() => console.log(`API running on localhost:${port}`));

一旦我使用nodemon app.js运行并在localhost:3000运行它运行我的角度应用程序它很好,而且我去localhost:3000 / app / api它也工作得很好,

但是,当我更改角度应用程序时,它不会自动刷新我的应用程序,因为它正在运行节点应用程序当前用于刷新它我需要运行ng build而不是它将影响我对角度应用程序的新更改

所以,我想要的是运行服务 – 开启它将运行角度应用程序但不运行节点js api所以想要运行两者,一旦我从角度应用程序或节点js应用程序更改它必须自动刷新.

解决方法

您不能在同一端口上运行两个不同的应用程序.当你运行服务时,Angular-cli在幕后使用nodejs服务器(技术上是webpack-dev-server),这意味着端口已经在使用中.

有两种可能的解决方案.

>使用节点应用程序提供静态前端文件.然后你不能真正使用ng服务(这可能是你在现场直播时所做的).
>使用具有不同端口的nodejs,并使用Angular的代理配置,让Angular认为api端口实际上是4200(这在开发期间可能是最好的).

这主要是我在开发过程中的一个问题,因为你很可能不会(也不应该)使用ng live live,所以选项2将是我最好的推荐.

要配置代理,请在角度应用程序根目录中创建名为proxy.config.json的文件,其中包含以下内容

{
  "/api/*": {
    "target": "http://localhost:3000","secure": false,"changeOrigin": true
  }
}

然后,当您运行服务时,使用ng serve –proxy-config proxy.config.json运行它.

Here’s a link to the documentation

这是构建生产时的替代方案(上面的解决方案1):

要构建生产,你使用ng build –prod到create a production ready Angular build然后(假设你在你的节点服务器上使用Express),使用app.use(express.static(‘dist /’))之类的内容,如Express documentation中所述.I “我自己没有使用节点(我使用的是.NET Core),所以我担心我无法提供更多详细信息.

猜你在找的Node.js相关文章