Php 难点和一些更基本的问题

Php 难点和一些更基本的问题,php,javascript,node.js,Php,Javascript,Node.js,在互联网上尝试探索Nodejs及其基本教程几周后,我只不过是一个Nodejs用户。当我开始进入真正的self program server时,我遇到了几个问题,我尝试在Google上搜索,但似乎没有任何资源是有用的,所以,是的,我是来问的。请帮助我理解这些并成为节点开发人员: 1) 根据我的经验,只有一个服务器文件server.js作为服务器通过nodejs运行。作为一名PHP开发人员开始,我对它的工作原理并不熟悉,比如,如果你有PHP,process.PHP,rank.PHP,无论什么.PHP

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

1) 根据我的经验,只有一个服务器文件
server.js
作为服务器通过nodejs运行。作为一名PHP开发人员开始,我对它的工作原理并不熟悉,比如,如果你有PHP,process.PHP,rank.PHP,无论什么.PHP处理不同的任务,我只需要将这些数据发送到相应的服务器文件,但在nodejs的情况下,我只能有1个server.js文件,那么,我如何处理来自单个服务器文件的不同任务?是否可以创建多个服务器文件?(我真的不想为了执行不同的任务而将一个包含许多参数的文件弄乱,并使文件的大小显著变大!)

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

3) 现在,随着我进一步熟悉nodejsphp函数,如邮件、加密。。。我需要为不同的任务安装不同的模块,我想象有一天如果我在线托管它,我必须重新开始安装它们?我只是想知道为什么没有像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"]);
--致以最良好的问候和赞赏。提姆

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

  • 无论使用何种编程语言,用户名和密码等内容都不应以纯文本形式存储。(理想情况下,您应该有API密钥,而不是用户名和密码。)有几种方法可以处理这个问题,但最简单的方法是在每个环境(开发、质量保证、生产)中为API密钥、用户名等设置一个环境变量

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

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

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

  • 无论使用何种编程语言,用户名和密码等内容都不应以纯文本形式存储。(理想情况下,您应该有API密钥,而不是用户名和密码。)有几种方法可以处理这个问题,但最简单的方法是在每个环境(开发、质量保证、生产)中为API密钥、用户名等设置一个环境变量

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

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

  • 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的url

    2) 不,该文件不会被删除
    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/');