如何在PHP页面中运行Node.js脚本?

时间:2014-10-20 18:04:27

标签: javascript php html node.js

我是自2010年以来的PHP开发人员。 我喜欢PHP,因为它很简单。但我想了解更多关于Node.js.它看起来很有趣,特别是因为我了解JavaScript,而且我非常喜欢它。

有没有人知道如何在我的HTML页面中运行Node.js脚本,而不像PHP那样显示源代码?这是真的有效吗?

我看过许多教程,他们在终端中执行Node.js,但我没有找到一种在简单的HTML页面中运行Node.js的快捷方法。

谢谢! :)

2 个答案:

答案 0 :(得分:3)

您似乎正在混淆PHP的两个不同功能:

  1. 可以将许多Web服务器配置为通过PHP解释器运行PHP程序,并将结果提供给浏览器。
  2. PHP被设计为带有铃声的模板语言,因此PHP代码嵌入在模板中。
  3. 如果您使用的是Node.js,那么通常会:

    1. 在Node.js中编写您的网络服务器(尽管您可以为其配置前端代理)。在the Node.js homepage上有一个例子,但也有各种框架,例如express,它们为你做了很多繁重的工作。
    2. 将模板代码与程序代码分开。节点有许多template modules可用。
    3. 引自Node.js主页:

        

      示例:Webserver

           

      这个用Node编写的简单Web服务器响应   每个请求都有“Hello World”。

      var http = require('http');
      http.createServer(function (req, res) {
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.end('Hello World\n');
      }).listen(1337, '127.0.0.1');
      console.log('Server running at http://127.0.0.1:1337/');
      
           

      要运行服务器,请将代码放入example.js文件中并执行它   使用命令行中的节点程序:

      % node example.js
      Server running at http://127.0.0.1:1337/
      
           

      这是一个侦听端口1337的简单TCP服务器的示例   并回应你发送的任何内容:

      var net = require('net');
      
      var server = net.createServer(function (socket) {
        socket.write('Echo server\r\n');
        socket.pipe(socket);
      });
      
      server.listen(1337, '127.0.0.1');
      

答案 1 :(得分:0)

您编写的PHP代码可能只是php的html模板版本(缺少更好的术语......)

当在浏览器中请求.php页面时,会调用php解释器来解析html中的php标记并用html / text替换它。然后将该结果发送到浏览器。

node.js不会这样工作。

当涉及到这个特定主题时,Node.js比php更详细。 node.js不仅仅是一个Web应用程序框架或Web服务器,它还可以用作运行常见任务的各种可执行文件。

通常,为了获得您在node.js中寻找的功能,您可以使用模板框架(如handlebars)和express来处理Web服务器和路由。这是一个例子:

// this is just an example, it may or may not work, I did not test it.
var express = require('express'),
    app = express(),
    exphbs = require('express-handlebars'),
    hbs,
    path = require('path');

// serve all files under the /assets folder as static files
app.use('/assets', express.static(path.join(__dirname, '/assets')));

// handlebar engine config
hbs = exphbs.create({
    defaultLayout: 'main'
});

// attach engine and specify view location
app.engine('handlebars', hbs.engine);
app.set('view engine', 'handlebars');
app.set('views', path.join(__dirname, '/views'));

// home page http://domain.com/
app.get('/', function (req, resp) {
    resp.render('home', {title: 'Home | Hello World!', text: 'Welcome to my site!'});
});

// start webserver
app.listen(3000);

上述节点应用程序将创建一个侦听端口3000的Web服务器,该服务器响应对/assets/的请求。请求/后,home.handlebars文件夹中的/views视图将使用main.handlebars /views/layouts布局中的/布局进行渲染这将显示为上面创建的<!doctype html> <html> <head> <meta charset="utf-8" /> <title>{{title}}</title> </head> <body> {{{body}}} </body> </html> 路由传递的标题:

/views/layouts/main.handlebars

<h1>Hello World!</h1>
<p>{{text}}</p>

/views/home.handlebars

{{1}}