web-dev-qa-db-fra.com

Comment utiliser jsonp avec node.js express

j'essaie de créer l'application Samsung Smart TV avec node.js.

Dans mon projet, je veux faire communiquer mon application avec le serveur pc.

Selon de nombreux sites Web, je peux le faire avec "jsonp".

Voici un code côté client que j'ai trouvé.

<html>
<head>
    <title>jsonp test</title>
    <script src="http://code.jquery.com/jquery-1.6.2.min.js"></script>      
    <script type="text/javascript">
        $(function(){               
            $('#select_link').click(function(e){
                e.preventDefault();
                console.log('select_link clicked');

                function test(data){
                    return {"message":"ok"};
                }

                 $.ajax({
                    dataType: 'jsonp',
                    data: "data=yeah",                      
                    jsonp: 'callback',
                    url: 'http://172.20.10.3:3000/endpoint?callback=?',                     
                    success: function(data) {
                        console.log('success');
                        console.log(JSON.stringify(data));
                    }
                });
            });             
        });
    </script>
</head>
<body>
    <div id="select_div"><a href="#" id="select_link">Test</a></div>    
</body>

Et, voici un code côté serveur que j'ai trouvé.

app.get('/endpoint', function(req, res){
var obj = {};
obj.title = 'title';
obj.data = 'data';

console.log('params: ' + JSON.stringify(req.params));
console.log('body: ' + JSON.stringify(req.body));
console.log('query: ' + JSON.stringify(req.query));

res.header('Content-type','application/json');
res.header('Charset','utf8');
res.send(req.query.callback + '('+ JSON.stringify(obj) + ');');
});

Ces codes fonctionnent sur mon PC (serveur PC), mais lorsque j'ouvre la page client sur un autre ordinateur, cela ne fonctionne pas.

Console, donnez-moi ce journal:

 X GET http://172.30.2.2:3000/endpoint?callback=jQuery11020685203080996871_1376482492523&data=yeah&_=1376482492524  

Je veux utiliser jsonp pour gérer plusieurs domaines, mais cela ne fonctionne pas je pense ...

Que puis-je faire pour résoudre ce problème?

S'il vous plaît, aidez-moi !!

19
newbeeep

il suffit d'utiliser

res.jsonp(obj)

vous pouvez aller ExpressJS JSONP pour plus d'informations

50
Nur Rony

Essayez de remplacer

res.send(req.query.callback + '('+ JSON.stringify(obj) + ');');

avec

res.jsonp(req.query.callback + '('+ JSON.stringify(obj) + ');');
5
jackhao