在 NodeJS 中进行客户端-服务器通信的简单方法
Simple way of client-server communication in NodeJS
我在GitHub上找到了一个非常有用的代码片段,可以在NodeJS中提供简单的服务器-客户端通信。
经过一些小的格式化后,我的代码如下所示:
客户端(Jade + Javascript)
head
title jsonp test
script(src='http://code.jquery.com/jquery-1.6.2.min.js')
script(type='text/javascript').
$(function () {
$('#select_link').click(function (e) {
e.preventDefault();
console.log('select_link clicked');
var data = {};
data.title = "title";
data.message = "message";
$.ajax({
type: 'POST',
data: JSON.stringify(data),
contentType: 'application/json',
url: 'http://localhost:7776/domaintest',
success: function (data) {
console.log('success');
console.log(JSON.stringify(data));
}
});
});
});
body
#select_div
a#select_link(href='#') Test
服务器(Javascript)
var express = require('express');
var app = express.createServer();
app.use(express.bodyParser());
app.post('/domaintest', function(req, res){
var obj = {};
console.log('body: ' + JSON.stringify(req.body));
res.send(req.body);
});
app.listen(7776);
路由定义到客户端(我被告知服务器没有必要,因为app.post
达到目的)
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.render('index');
});
module.exports = router;
结果是一个简单的文本,可以单击"测试"。当我单击时,实际事件应该发生,只要我从代码中读出它,但浏览器在jquery-1.6.2.min.js:18
中说POST http://localhost:7776/domaintest 404 (Not Found)
。非常准确地说,错误发生在 $.ajax
,根据调试器。
由于 jQuery 代码由于格式而几乎不可读(不是判断,它可能有其原因),我需要您的帮助。错误的可能来源是什么?我忘了提什么吗?
将服务器.js文件更改为此文件。我还没有测试代码,但这应该有效。
var express = require('express');
var app = express.createServer();
var router = express.Router();
app.use(express.bodyParser());
router.post('/domaintest', function(req, res, next) {
var obj = {};
console.log('body: ' + JSON.stringify(req.body));
res.send(req.body);
});
app.listen(7776);
您可以阅读此内容以获取更多信息 http://adrianmejia.com/blog/2014/10/01/creating-a-restful-api-tutorial-with-nodejs-and-mongodb/
我认为这是因为您的调用body-parser
不正确。正文解析器不是 Express 的一部分,因此您无法执行express.bodyParser
。
您需要像这样包含它:
var bodyParser = require('body-parser);
app.use(bodyParser.urlencoded({ extended: false }))
经过一些研究和外部帮助,我找到了解决方案。
对于domaintest
,定义了一条路由,它与我为客户端定义的路由几乎相同。好吧,对于domaintest
路由,我必须在router.get
之后添加下一个函数调用:
router.post('/', function(req, res) {
res.setHeader('Content-Type', 'application/json');
res.send(JSON.stringify({data: 'asd'}));
});
上面所谓的服务器代码实际上是未使用和不必要的; domaintest
充当服务器。
- 客户端服务器常量通信PHP
- 只使用jquery即可在没有服务器的情况下与两个页面进行即时通信
- 是否可以与位于不同于html5网站呈现的服务器的网络套接字进行通信
- Socket.IO:如何在同一服务器中的Socket.on()事件之间通信/交换数据
- JavaScript可以与不同的服务器通信吗?
- MQTT 服务器到客户端的通信
- 用于客户端-服务器通信和安全的 API 密钥
- 如何在同一域中托管的 JS 应用和 OAuth2.0 服务器之间安全地通信
- 在Javascript中无需服务器即可在客户端之间进行通信
- 使用 node.js 进行客户端服务器通信
- 在 NodeJS 中进行客户端-服务器通信的简单方法
- 当本地主机服务器提供实际页面时,如何使用 socket.io 与另一台服务器通信
- PHP 聊天客户端-服务器通信
- 服务器端 Ruby 进程和客户端 Javascript 之间的通信
- Socket.IO 服务器间通信
- 如何在没有Flash/Java的情况下实现浏览器到浏览器的通信(允许服务器作为桥梁)
- 客户端-服务器javascript通信
- 客户端Java服务器与Javascript之间的套接字通信
- PhoneGap与外部服务器的通信
- 使用Backbone.js与服务器通信