我的网站如何知道连接我的Node应用程序?

时间:2015-09-18 03:48:09

标签: node.js server

如果我在Heroku上运行Node应用程序,它会创建一个服务器并侦听端口80.我的网站如何知道与我的node.js应用程序中的代码进行交互?

基本上,我试图将使用Ajax在客户端创建的对象发送到服务器端。我的node.js应用程序如何监听这些数据,特别是在生产中?

更多信息:
所以我有一个静态的网站视图,通过共享主机上传html和css。我正在尝试使用Node.js通过Stripe实现一个简单的支付系统。所以我只有一台Node服务器和一个共享主机供我的网站使用。我的问题是如何在不通过Node提供.html文件的情况下连接两者?

2 个答案:

答案 0 :(得分:1)

目前还不清楚你在设置node.js服务器方面的确切位置,因为网络上的许多示例都解释了你要求的所有内容。所以,既然我不知道你遇到了什么问题,我会从概念上解释你从网站上调查Ajax的步骤:

  1. 将node.js服务器设置为侦听DNS中主机上的唯一端口。由于这是与您的网站不同的服务器,因此它需要是不同的主机或不同的端口(如果在同一主机上)。
  2. 在node.js应用中启用CORS,以便您的node.js服务器允许浏览器跨越原始请求。有一个NPM模块可以让你很容易。
  3. 设置node.js Web服务器的shell。我个人会使用Express来简化它。
  4. 在服务器中为特定路线上的“帖子”创建请求处理程序。这将允许您的Web服务器侦听特定请求。
  5. 在请求处理程序中编写代码,该处理程序解析请求并执行您要对请求执行的任何操作。
  6. 仅供参考,如果您认为与node.js服务器有关的唯一方法是使用Stripe checkout,那么您可以在您的网页中编写Javascript,直接与Strip服务进行通信,而无需拥有自己的节点.js服务器。这取决于你要做的事情的细节。这里有一些剥离结帐详情:https://stripe.com/docs/checkout

答案 1 :(得分:0)

因为你申报了你的路线(假设你正在使用像Express这样的东西,或者你已经制作了自己的香草http服务器)所以当你访问路线时它知道要执行你绑定的任何功能这也是

e.g。 app.get('/', someController);

知道每当有人访问/时,都会someController执行。

Node通过你自己的程序直接运行网站并知道这些事情

如果我误解了,请告诉我

回复评论:

如果您上传view个文件,我不太了解您的问题,例如您home.ejs/html/jade用于其他服务器的任何内容,然后将app上传到另一台服务器,它将无法正常工作,您将找不到404或其他内容。我假设您是来自PHP或者您拥有PHP文件的东西,并且所有内容都合并为您将html/php放在一个文件中,然后当您访问localhost / home.php时它就可以了。节点不同你有app通过你的服务器端逻辑你告诉它要调用哪个视图,你的客户端东西(比如你的视图和css / js以及什么不是)与你的服务器端逻辑完全分开,通过你的控制器,你告诉什么函数调用什么视图,例如

(假设您正在使用快递) 你有这个作为控制器:

app.get('/', function(req, res) {
  res.render('home');
});

然后在你的app.js逻辑中:

// Your Route
app.use('/', homeController)

然后在views你可能有

home.html/jade/ejs(扩展取决于您正在使用的模板)

现在当有人访问/时,路线会看到这个并且没问题我需要拨打homeController,这样就可以了,而且很开心,然后获取内容的功能,哦,它想要渲染一个视图文件,然后表达'函数res.render将映射到views文件夹,直到找到类似于您所请求的内容,在这种情况下:home.html,然后呈现文件并将响应发回对客户来说,

所以简而言之 Request > Route > Controller > Function Body > Does whatever you've programmed from there

简而言之,您的客户端和服务器逻辑完全相互独立

PHP或其他内容一样,您拥有自己的php文件

<?php

<html>
</html>

?> (i think thats how it goes I haven't done php in a looooonngg time)

然后你运行apache或者其他什么,apache将神奇地路由到请求的.php文件,编译并呈现它

我希望我的答案好一点