php - Nodejs 和一些更基本的问题

标签 php javascript node.js

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

1)正如我所经历的,只有1个服务器文件 server.js通过nodejs作为服务器运行。作为一名 PHP 开发人员,我不熟悉它的工作原理,例如,如果你有 PHP、process.php、rank.php、whatever.php 来处理不同的任务,我只需要将这些数据发送到相应的服务器文件,但在 Nodejs 的情况下,我只能有 1 个 server.js 文件,那么我如何从单个服务器文件处理不同的任务?是否有办法创建多个服务器文件? (我真的不想用许多参数搞乱单个文件来执行不同的任务并使文件大小变得非常大!)

2) 假设第一个问题解决了,现在又导致了另一个问题。我一直在尝试一些有关数据库管理的教程,例如 mysql 或邮件(需要我输入电子邮件密码),...但正如我注意到的,我在 javascript 文件中输入了所需的密码?!?!?我尝试了 localhost/server.js 并且该文件是公开可用的...这是我真的需要担心的事情吗?

3)现在,随着我进一步熟悉 nodejs 的 PHP 功能,例如邮件、加密......我需要为不同的任务安装不同的模块,我想象有一天如果我将其托管在网上,我必须重新开始安装这些模块吗?我只是想知道为什么没有像 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);
});

[进程.php]

die($_POST["p"]);

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

最佳答案

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) 不,该文件将不可见。在你的机器上发生的情况是你有另一台服务器正在运行。因此,您实际上将 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服务器、模板语言、数据库适配器等。

关于php - Nodejs 和一些更基本的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18544967/

相关文章:

php - 在一列mysql中使用一个where条件查找多个值

javascript - Node.js 循环异步调用

javascript - Bootstrap 崩溃正在覆盖下一个 Bootstrap 崩溃标题

php - 如何加载没有php扩展名的php文件

php - 我可以使用私有(private)实例方法作为回调吗?

php - 匹配 MySQL 查询中的数组值

javascript - Node.js 异步循环函数

php - Javascript 弹出菜单(Twitter 风格)。在表单中添加签到和 checkout 日历

javascript - 如何根据字段是否存在对MongoDB集合进行排序

node.js - Express GraphQL 中根值和上下文的区别