我想要的是我也在同一个角度项目中使用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应用程序更改它必须自动刷新.
解决方法
有两种可能的解决方案.
>使用节点应用程序提供静态前端文件.然后你不能真正使用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),所以我担心我无法提供更多详细信息.