Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了分离Node.js服务器和客户端大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我正在使用服务器和客户端编写一个网络应用程序.

>服务器作为一个API,并使用@L_944_2@框架.
>客户端只是一个节点静态应用程序,它提供静态的javascript / html文件.

我想要能够彼此独立地分开,或者同时两者兼容.

这是我如何设想目录结构:

/my-app
     app.js
     /server
         server.js
     /client
         client.js

我想以三种不同的方式运行它:

>在一些端口上运行服务器(API)(例如3000):

@H_211_14@my-app/server> node server.js ...Server listening on localhost:3000/api

>只运行客户端(即从/ client目录提供静态文件):

@H_211_14@my-app/client> node client.js ...Server listening on localhost:4000/client

>在同一端口上运行服务器和客户端(由单个node.js实例):

@H_211_14@my-app> node app.js ...Server listening on localhost:5000

这可能在节点中,什么是正确的配置方式?

我开始如下:

/////////////
// server.js
/////////////
// Run the server if this file is run as script
if(module.parent){
   app.listen("3000/client")  
}

/////////////
// client.js
/////////////
var static = require('node-static');
var file = new(static.Server)('.');
var app = require('http').createServer(function (request,responsE) {
  request.addListener('end',function () {
    file.serve(request,responsE);
  });
});
if(module.parent){
   app.listen("4000/client");
}

/////////////
// app.js
/////////////
server = require("server/server.js")
server.app.listen("5000/api")

client = require("client/client.js")
client.app.listen("5000/client")  <--- ?????

我不知道如何连接我的app.js中的客户端和服务器,以便它们都从同一端口/进程/线程等提供服务…

注意:排除代码,没有测试,可能不正确.我是node.js的新手

任何技巧赞赏

解决方法

当从同一个脚本启动服务器和客户端时,您可以实例化一个 connect(快捷的快递)服务器实例,并且当URL以public开头时,将请求路由到node-static,否则连接.

就像是

var connect = require('connect');
server = connect.createServer();
server.use('/public',client.handler_function);
server.use(server.express_handler_function);

应该做.您需要在client.js中公开函数(请求,响应),以便它可以通过client.handler_function引用,并对express应用程序执行相同操作(请参阅文档).

例如,在client.js中设置函数会涉及到:

var static = require('node-static');
var file = new(static.Server)('.');
var handler = function (request,responsE);
  });
};
var app = require('http').createServer(handler);
if(module.parent){
   app.listen(4000);
   console.log("Server (statiC) listening on 4000")
}
module.exports = { handler_function: handler };

所以你可以通过做到处理程序:

var client = require('client'); // this returns the object you've set to `module.exports` in `client.js`
[...]
server.use('/public',client.handler_function);

其他方法

上面我详细说明的是最接近你想要的(根据你上次编辑中的澄清).还有其他选择,但是:

>在站点根目录下保留静态和快速生成的URL,例如example.com/a_statically_served_script.js和example.com/api_endpoint;首先尝试服务静态文件,如果找不到您将发送请求到基于快照的应用程序
>使用app.js脚本在不同端口(或unix域套接字)上启动两个服务器,并在其前面使用node-proxy(或类似的,甚至是Nginx / apache作为反向代理)

同根

对于第一种方法,您需要向file.serve添加错误处理程序,例如

file.serve(request,response,function(e,res) {
    if (e && (e.status == 404)) {
        // if the file wasn't found
        if (next) {
            next(request,responsE);
        }
    }
}

一个应该是client.js脚本中的一个变量,当脚本直接运行但脚本是必需的时候没有设置(查看节点中的模块和导出如何工作的文档) – 设置,下一个指的是一个函数,它需要(req,res)并将它们提供给它们来表达(看看有关如何执行此操作的快速文档).

备注

请记住,这不是一个详尽的答案:它只是一堆指向要查找的文档和可以用来解决问题的技巧.

值得记住的是,在节点中,通常由函数(请求,响应)来表示和实现请求处理程序.这个成语在connect / express中被扩展到funciton(请求,响应,下一个):这里下一个表示通过server.use()来安装到服务器的处理程序链中的下一个可用的处理函数(函数(请求,响应))处理程序).

大佬总结

以上是大佬教程为你收集整理的分离Node.js服务器和客户端全部内容,希望文章能够帮你解决分离Node.js服务器和客户端所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。