簡體   English   中英

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) jquery-1.6.2.min.js:18 確切地說,根據調試器,錯誤發生在$.ajax

由於jQuery的格式實際上是不可讀的(不判斷,可能是有原因的),因此,我需要您的幫助。 錯誤的可能根源是什么? 我忘了提什么嗎?

將您的server.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充當服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM