2017-08-22 2 views
0

Le client envoie une demande de publication en appuyant sur un bouton. (côté serveur: lancez la recherche pour découvrir les périphériques bluetooth)Dans node.js Comment envoyer app.post au client par événement personnalisé?

Après, à partir du serveur, nous voulons envoyer un res.send("BLE_name") après la fin d'une fonction qui recherche des périphériques Bluetooth, mais les réponses arrivent longtemps après que le bouton ait été allumé. pressé par le client.

Hypothèse: Je voudrais appeler app.post après mon propre événement personnalisé ... Comment créer un événement personnalisé pour appeler app.post()?

Nous utilisons:

  • Node.js
  • noble Module
  • expriment
 
     // To send datas to client 
     // List of bluetooth peripherals 
     // JSON object 
     app.post('/resScan', function(req, res){ 
      res.send(JSON_Object);  
     }); 

Cordialement et merci beaucoup,

Philippe

+0

essayez-vous de déclencher une requête 'POST' côté client, ** sans ** le client appuyant sur un bouton? –

+0

Je pense qu'il essaie d'envoyer un POST à ​​partir du serveur (??) quelque chose est très brisé si donc –

+0

essayez res.end ("BLE_name") à la place res.send ("BLE_name"). ou res.send ("BLE_name"). end() – slesh

Répondre

0

Non, je travaille avec lui, en fait, nous avons un problème:

bouton fonctionne correctement et appelez le serveur correctement. Nous recevons correctement « req » aussi, mais nous appelons une autre fonction (avec un événement) qui prend un temps aléatoire et après que cette fonction est terminée, nous aimerions facturer la réponse, comme celle-ci:

noble.on('discover', function(){ 
    //....many statements and others process here 
    // we use req.body.content here 

    // and at the end 

    app.post('/server.js', function(req, res){ 
      res.send('data-to-the-client'); 
    }); 
}); 

Notre problème c'est plus: comme les événements fonctionnent? Et dire d'accord tous les événements sont terminés maintenant facturer la res.

1

Avec mon ami, nous avons trouvé une solution, pas sûr que c'est la solution.

const formClientName = "form_03_btn"; 

var my_res_global = null; 

app.get('/', function(req, res) 
{ 
    // We update the res value each time 
    // we have a app.post method 
    my_res_global = res; 
    res.render(formClientName); 
}); // app.get('/', function(req, res)) 

app.post('/arduino_cmd', function(req, res) 
{ 
    // We update the res value each time 
    // we have a app.post method 
    my_res_global = res; 

    commandLine = req.body.content; 
    sendCommandToArduino(commandLine); 
    res.render(formClientName); 
}); // app.post('/arduino_cmd', function(req, res)) 

[...] 

dialogCharacteristic[dialogCharacteristic.length-1].on('data', function(data, isNotification) 
{ 
    [...] 

    my_res_global.render(formClientName, { displayArduino: "My test works fine !" }); 

    [...] 

}); 

Cela fonctionne très bien!

Maintenant, nous avons une erreur si nous écrivons:

dialogCharacteristic[dialogCharacteristic.length-1].on('data', function(data, isNotification) 
{ 
    [...] 

    var myData = "My test works fine !"; 

    my_res_global.render(formClientName, { displayArduino: myData }); 

    [...] 

}); 

donne l'erreur: Erreur: Impossible de définir les en-têtes après leur envoi.

Nous cherchons la solution ...

Un grand merci à tous pour votre temps, des questions et des idées! Sincères salutations,

Philippe.