Nodejs和一些基本问题

时间:2013-08-31 05:48:53

标签: php javascript node.js

在尝试在互联网上探索Nodejs及其基本教程几周后,我只不过是一个Nodejs用户。当我开始进入真正的自编程服务器时,我遇到了几个问题,我试过谷歌,但没有资源似乎有用,所以,是的,我在这里问。请帮助我理解这些并成为节点开发人员:

1)正如我所经历的那样,只有1个服务器文件 server.js作为服务器运行nodejs。作为一名PHP开发人员,我不熟悉它是如何工作的,比如,如果你有PHP,那么process.php,rank.php,whatever.php处理不同的任务,我只需要来< / strong>将这些数据发送到相应的服务器文件,但在nodejs的情况下,我只能有1个server.js文件,那么我怎样才能从单个服务器文件处理不同的任务?反正有没有创建超过1个服务器文件? (我真的不想弄乱一个包含许多参数的文件来执行不同的任务,并使文件大小非常大!)

2)让我们说,第一个问题解决了,现在又导致了另一个问题。我一直在尝试一些关于数据库管理的教程,比如mysql或者邮件(这需要我输入我的电子邮件密码),但是正如我注意到的那样,我在javascript中输入了密码文件?!?!?我尝试localhost/server.js,文件公开 ...这是我真的需要担心的事情吗?

3)现在随着我进一步推进使用php函数熟悉 nodejs ,例如邮件,加密...我需要为不同的任务安装不同的模块,我想有一天如果我在线托管它,我必须重新开始安装它们吗?我只是想知道为什么PHP中没有任何标准函数。当然,这是个人问题。

4)我想请你帮我抛出几行代码(我只需要它非常基本)如何发送请求,接收数据如下面的代码那样,但是在nodejs中。这将有助于我抽象地理解nodejs是如何工作的。

[index.html的]

$.ajax({
    url: "process.php", //Which address should I send to if I use nodejs
    type: "POST",
    data: "p=test"
}).done(function(data) {
    console.log(data);
});

[process.php]

die($_POST["p"]);

- 致以最诚挚的问候和赞赏。添

3 个答案:

答案 0 :(得分:2)

  1. 我认为这里有一些关于网络服务器如何工作的严重误解。传统上,在Apache上运行php会将所有URL映射到服务器文件系统上的相应脚本。但是,大多数php Web框架(Zend,Symfony,CakePHP等)与mod_rewrite()规则相结合,会将所有请求发送到单个控制器,然后根据请求URL将这些请求路由到相应的脚本。 This is a good brief explanation如何使用php。当您使用node.js和默认服务器/ hello world示例时,不提供此路由,这意味着您需要自己构建它或使用框架(如express)来为您处理它。这与使用上述框架之一在php中构建Web应用程序没有太大区别。

  2. 用户名和密码之类的东西永远不会以纯文本形式存储,无论编程语言如何。 (理想情况下,你有API密钥而不是用户名和密码。)有几种方法可以解决这个问题,但最简单的方法是在每个环境中设置一个环境变量(dev,QA,生产)用于API密钥,用户名等

  3. 使用npm。创建一个package.json文件来管理所有依赖项。然后部署应该像在每个环境中运行npm install一样简单。

  4. 这将取决于您决定使用哪个框架(如果有的话),我建议查看相应的文档,了解如何处理POST请求的示例。

答案 1 :(得分:2)

1)Nodejs与PHP有点不同。你在那里做的是运行一个Web服务器,它接受http请求并处理它。在PHP世界中,这是由另一台服务器完成的。通常这是Apache或nginx,但那不是PHP。所以,你应该做的是使用像Express这样的框架或编写自己的路由逻辑。例如:

var sendResponse = function(str, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end(str + '\n');
}
var http = require('http');
http.createServer(function (req, res) {
    var url = req.url;
    switch(url) {
        case "/test": sendResponse("test url", res); break;
        case "/about": sendResponse("about url", res); break;
        default: sendResponse("default url", res);
    }
    sendResponse("test", res);  
}).listen(1337, '127.0.0.1');
console.log('Server running at 127.0.0.1:1337');

在该示例中,您解析给定的URL并执行javascript函数。您应该将页面组织成模块并相应地要求它们。因此,如果您运行上面的代码,您可以输入类似127.0.0.1:1337/about

的网址

2)不要看文件。在您的计算机上发生的是您运行另一台服务器。因此,您实际上将javascript文件作为静态文件打开。停止你的Apache,你会发现该文件无法访问。

3)这就是Nodejs的美丽。包管理系统使安装变得简单且极其灵活。你可以使用大量的模块并安装你想要的任何东西。这也使您能够构建自己的模块。在PHP中,没有像Nodejs那样好的中央分发系统,这使得难以将模块从一个项目转移到另一个项目。

4)这是一个简单的nodejs服务器:

var serverHTML = function(res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    var str = '\
        <html>\
            <head>\
                <title>Page</title>\
            </head>\
            <body>\
                <h1>Page</h1>\
            </body>\
        </html>\
    ';
    res.end(str + '\n');
}
var serveAjaxData = function(res) {
    res.writeHead(200, {'Content-Type': 'application/json'});
    res.end('{"data":"..."}\n');
}
var http = require('http');
http.createServer(function (req, res) {
    switch(req.url) {
        case "/process": serveAjaxData(res); break;
        default: serverHTML(res);
    }   
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

只需使用与第1点相同的方法。并映射一个特定的URL,它将数据返回给ajax请求。这只是一个路由问题。

一般来说,有很多模块,可以让你的生活更轻松。有框架,包装纯nodejs服务器,模板语言,数据库适配器等。

答案 2 :(得分:0)

我认为你应该先了解一件事......

Node.js和PHP是编写Web应用程序的两种截然不同的方式 PHP是一种脚本语言。在服务器收到类似PHP脚本的请求后,相关的PHP脚本由Apache(或任何其他服务器)执行。如果它收到其他静态文件的请求,它会再次尝试从文档根目录中获取它们并提供它们。 PHP与此无关。

另一方面,

Node.js 是服务器。理解这一点非常重要。运行node app.js只是开始执行文件。这就对了。除非你想要它,否则它甚至不会启动Web服务器。那一个文件现在是您的服务器脚本。除非您以这种方式编写,否则它不会执行或获取其他文件。将文件存储在node.js应用程序文件夹中并不会自动意味着现在可以从Web访问文件,因为默认情况下,Web服务器(如果已初始化文件服务器)未配置为从该目录中获取内容。 (顺便说一下,有一种方法可以轻松地使用公共Web访问目录)。

这应该回答你的前两个问题。关于你的第三个问题:你现在可能已经知道了,但是Node.js本质上是非常低级的。它做了一些事情,但非常有效和非常好。它不像PHP这样的“一刀切”工具,它带有几个库。

我认为其他答案可以帮助你解决第四个问题。我只想把它告诉你。