在 NodeJS 中进行客户端-服务器通信的简单方法

Simple way of client-server communication in NodeJS

本文关键字:通信 服务器 简单 方法 客户端 NodeJS      更新时间:2023-09-26

我在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充当服务器。