节点 JS 客户端与服务器

Posted

技术标签:

【中文标题】节点 JS 客户端与服务器【英文标题】:node JS client vs server 【发布时间】:2016-06-20 22:09:57 【问题描述】:

我是一名 php 开发人员,最近在 express 中使用了一些 node JS。

我很困惑的一件事是你如何告诉你的快速服务器一个 javascript 文件应该在服务器上执行还是发送到浏览器以在客户端执行。

在 PHP 中这不是问题,因为每种文件类型(php、pearl、jpg、js)都有其运行的专用位置(服务器或客户端)。编写其他语言(如 Java 和 C#)的 HTTP 应用程序也是如此

考虑这个示例代码

var express = require('express'); var app = express();

app.get('/some_page', function(req, res) res.send('你好世界'); );

app.listen(3000);

不涉及 JS,所以 'hello world' 被发送到浏览器并由浏览器呈现。

但是如果代码是

var express = require('express'); var app = express();

app.get('/', function(req, res) res.send('console.log('hello 世界')'); );

app.listen(3000);

这次我们有了 JS 函数 console.log() 那么 node.js 如何知道是否应该运行此代码或将其发送到浏览器。

【问题讨论】:

看来在跳到 express.js 之前你需要学习 node.js 的基础知识 【参考方案1】:

这都是app.get('/', function(req, res) 标签中的所有内容

res.send('console.log("hello world!")')

将在客户页面上打印console.log("hello world!")

res.send('<html><body><script>console.log("hello world!");</script></body></html>')

将在客户端的控制台中打印hello world!

 res.send('hello world!');
 console.log("hello world!");

将在客户端页面和服务器控制台上打印hello world!

所以基本上你发送给客户端的所有代码都将在客户端完成,而你不发送给客户端的代码将在服务器端完成

编辑

likeAnkur Rana说你也可以发送Html文件

res.sendFile('index.html');

在与此文件相同的目录中,我们有一个名为 index.html 的文件:

<html>
<body>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
    <div id="myId">console.log("hello world!")</div>
    <script>
        //regular js here
     $("#myId").html("Hello World!");
    </script>
</body>
</html>

【讨论】:

【参考方案2】:

您正在使用express,因此您应该使用static 中间件明确指定客户端Javascript 代码。

在下面的示例中,您定义了public 目录来存储它。

// GET /style.css etc
app.use(express.static(__dirname + '/public'));

其他一切都将在服务器端执行。

更多关于中间件:http://expressjs.com/en/guide/using-middleware.html

【讨论】:

【参考方案3】:

将 javascript 代码放在 HTML 文件的 script 标签中并使用 res.sendFile('pathToFile.html')

【讨论】:

以上是关于节点 JS 客户端与服务器的主要内容,如果未能解决你的问题,请参考以下文章

是否可以使用节点 js 托管 *** 服务器? [关闭]

jquery客户端没有得到节点js服务器响应

vue客户端文件直接从节点js服务器下载不起作用

我正在使用 mandrill 和 Node.js 创建一个邮件客户端...我的节点服务器在提交邮件客户端表单时收到一个空的 POST 请求正文

获取节点 js 服务器上特定时区的当前时间

socket.io :从服务器节点 js 接收数据