节点 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 客户端与服务器的主要内容,如果未能解决你的问题,请参考以下文章
我正在使用 mandrill 和 Node.js 创建一个邮件客户端...我的节点服务器在提交邮件客户端表单时收到一个空的 POST 请求正文