【问题标题】:node.js equivalent of a standard PHP ajax saving schemenode.js 等效于标准 PHP ajax 保存方案
【发布时间】:2015-02-19 11:22:40
【问题描述】:

在 JavaScript(客户端)+ PHP(服务器)网站中,我有这个方案用于将“online notepad”(在 #textbox 文本区域中)保存到服务器:

// client-side
$("#save-button").on('click', save); 

function save(e) {
  $.ajax({ type: "POST",
           url: "/php/save.php",
           data: { projectname: $('#projectname').text(), 
                   data: $('#textbox').text() },
           success: function(data) { alert('Data saved'); },
           error: function(data) { console.log(data); } });
}

这在服务器端 (/php/save.php):

<?php

$projectname = $_POST['projectname'];
$data = $_POST['data'];

// save this into database

?>

node.js(客户端+服务器)中等效的“发布到服务器并保存在服务器上”方案是什么?(例如使用express

是否有用于此类任务的知名 node.js“pattern”?

在客户端使用 $.ajax(...) 并在服务器上使用 node.js 是否常见/良好的做法? 我认为 node.js 引入了一种新的思维方式,不再需要 ajax。 ..我错了吗?

【问题讨论】:

  • 当然,您没有义务在您的网络应用程序中进行ajax 调用,但是 1. 这种方法不是nodeJS 特定的 2. 它需要使用其他形式的通信(例如深度 url 重新加载或 WebSockets)。

标签: javascript ajax node.js express


【解决方案1】:
  1. node.js(客户端+服务器)中等效的“发布到服务器并保存在服务器上”方案是什么? (以快递为例)

特定于您的代码,它应该看起来像这样。

客户端:-

$("#save-button").on('click', save);

function save(e) {
  $.ajax({ type: "POST",
           url: "/php/save",
           data: { projectname: $('#projectname').text(), 
                   data: $('#textbox').text() },
           success: function(data) { alert('Data saved'); },
           error: function(data) { console.log(data); } });
}

和服务器端:-

router.post('/php/save', function(req, res) {   // server side
    var projectName = req.body.projectname;
    var data = req.body.data; 
    // save the data here to database
});

这里是我在 node 中接收 post 数据的方式,我需要需要 body-parser 模块 所以这个应该加在顶部,

var bodyParser = require('body-parser');

这将解析您的 http 请求正文,以便您可以直接以 req.body.data 的形式访问参数。

  1. 在客户端使用 $.ajax(...) 并在服务器上使用 node.js 是否常见/良好的做法?

$.ajax(...) on client :- 当然,为什么不......当我们使用不同的后端技术(如 .net 或 java)时,我们不使用 $.ajax(...) 吗?所以没有必要改变你的前端,只是你在后端使用了不同的技术

服务器上的节点 :- 现在这是基于意见的,节点是新的,我们 javascript 开发人员喜欢节点,因为它也是服务器端和客户端的单一技术,我会说节点很棒..但还有其他人会说节点是垃圾。我宁愿跳过回答这部分。

  1. node.js 引入了一种新的思维方式,让 ajax 不再需要...

我认为您指的是websockets。是的,节点是一种不同的思维方式。这并不能真正取代ajax,你可以找到一些信息here

WebSockets 的目的是在浏览器和服务器之间提供低延迟、双向、全双工和长时间运行的连接。 WebSockets 为浏览器应用程序打开了新的应用程序域,而这些应用程序使用 HTTP 和 AJAX(交互式游戏、动态媒体流、桥接现有网络协议等)是不可能实现的。

如果您不需要 WebSockets 提供的特定好处,那么坚持使用 AJAX 和 Comet 等现有技术可能是一个更好的主意,因为这允许您重用现有的庞大的工具、技术生态系统并与之集成、安全机制、知识库(即 stackoverflow 上知道 HTTP/Ajax/Comet 的人比 WebSockets 多得多)等。

这不是 node.js 特定的东西,你仍然可以在其他技术中实现 websockets。

所以 node.js 引入了一种新的思维方式,让不再需要 ajax 是错了!

【讨论】:

  • 非常好的答案,谢谢@NaeemShaikh!我也需要var express = require('express'); var router = express.Router();吗? (我可以编辑答案以添加这些行吗?)。别的东西:var bodyParser = require('body-parser'); 在哪里使用? bodyParser 的引用在哪里?
  • 您可以编辑答案..以及您“需要”的任何内容。您在代码顶部有 require。
【解决方案2】:

您只需要更改服务器端。根据您设置服务器的方式,您的代码可能如下所示:

router.post('/php/save.php', function(req, res) {
    var projectName = req.param('projectname');
    var data = req.param('data');
});

【讨论】:

  • 谢谢@Greg。是的,我想更改服务器端和客户端。你能提供客户端代码+服务器端代码吗? (我认为 AJAX 会被删除,不是吗?)
  • 您不需要更改客户端代码。使用 node 而不是 PHP 只会影响服务器,node 能够处理与 PHP 相同的请求。
  • 我实际上没有大量使用节点的经验,但据我所知,没有新的方法可以做到这一点。如果您愿意,可以查看我目前正在处理的项目 (github.com/gregthegeek/JGrader),尤其是 app.js、routes/index.js 和 views/index.ejs。但请注意,这是我的第一个节点项目,可能不一定遵循最佳实践。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-28
  • 2011-08-23
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多