具有params的Angular和NodeJS GET请求url仅返回响应对象no component HTML

时间:2017-07-04 12:00:21

标签: node.js angular express angular2-routing

我有一个类似'localhost:3000 / verify / a5d5sd'的网址,我已经发送到用户的电子邮件,点击此链接后,我正在使用param(a5d5sd)用于检查服务器和数据库(MongoDB)中的某些内容并返回带有对象的响应的链接,现在当在新选项卡上单击或打开链接时,我只看到来自服务器的响应,但没有看到来自我的HTML的响应Angular 2组件。

在我的Angular 2路由配置模块中,我确实配置了一个类似

的路由
  {
    path: 'verify/:id',
    component: MyComponent
  },

在此组件的ngOnInit上,我正在调用一个服务方法,该方法使用验证/:id 这样的网址生成GET http请求 param(:id)我使用@ angular / router中的ActivatedRoute来获取它,以便我可以发出请求。

为了解决这个问题,我建议使用以下代码供我的快递使用:

app.use(express.static(path.join(__dirname, 'client/dist')));

app.get('*', function(req, res) {
  res.sendFile(__dirname + '/client/dist/index.html');
})

甚至尝试过:

app.all('*', function(req, res) {
  res.sendFile(__dirname + '/client/dist/index.html');
})

此代码适用于直接导航(在搜索栏上粘贴网址),仅刷新 POST PUT 请求但不使用 GET 请求来自服务器端的响应,当我直接访问URL或刷新页面时,DOM是用服务器响应编写的,但是没有HTML,任何帮助都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

定义所有路线后,添加index.html文件的路线

// Set your routes here
app.use('/api', api);

// Catch all other routes and return the index file
app.get('*', function(req, res) {
  res.sendFile(path.join(__dirname, 'path/to/index.html')); //path from the root dir
});

这对我有用。 感谢