使用Node.JS作为REST服务器和Web服务器

我正在用Angular.js和Node.js写一个应用程序。

有一个用HTML和Angular.js编写的客户端应用程序 ,需要像Apache这样的Web服务器才能联机。

在Node.js中还有一个服务器端REST webservice ,它build立在restify (但我不在乎使用哪个REST API,我可以使用另一个REST API)。

我可以使用REST Web服务的Node.js服务器和服务客户​​端Web应用的另一个Node.js服务器来完成整个工作。 但我想只有一个Node.js服务器运行 ,在一个URL /端口(以防止跨域AJAX请求)。

我怎么能这样做?

不知道这是否适用于您当前的问题 – 但Express中的app.use()可以让一个主应用程序设置子应用程序来处理不同的路由前缀。 因此,您可以让主要应用程序将任何以/store/开头的请求指向一个Express应用程序,以及使用第二个Express应用程序对/app/任何请求。

http://expressjs.com/api.html#app.use

您可以在Nodejs之前使用代理。 最快的nginx

例子(nginx):

 server { listen 80; server_name example.com # Only http://example.com/api/~ location /api/ { proxy_pass http://localhost:8000; # node.js app proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ~* \.(jpg|jpeg|gif|png|css|js|json|woff|zip|tgz|gz|swf|ico|txt|xml)$ { expires max; root /var/www/site_path; } } 

你想同时提供客户端应用程序和API的URL …

(to prevent cross-domain AJAX requests).

为什么? 这不会扩展和违背标准的restful API implimentations。 最终你会想要支持CORS,因为在IE11和IE12的新版本推出的时候,最早将会在明年推出CORS。 JSONP可以是一个后备,直到他们得到。

cross-domain AJAX requests没有什么问题,最近也被鼓励了,因此这个公约的广泛采用。

如果您确实需要限制跨域API请求,则只需在您的节点服务器上将您想要授予访问权限的域列入白名单即可。

你想同时服务于同一端口的客户端应用程序和API …

  1. 通过NGINX在api.domain.com上代理通过节点服务器。

  2. 将客户端应用程序移到NGINX下的静态文档根目录下。

现在两个都坐在PORT 80上,只有一个节点服务器正在使用。