Cela ressemble à un google simple, mais je n'arrive pas à trouver la réponse ...
Pouvez-vous transmettre les fonctions asynchrones ES7 au routeur Express?
Exemple:
var express = require('express');
var app = express();
app.get('/', async function(req, res){
// some await stuff
res.send('hello world');
});
Sinon, pouvez-vous me diriger dans la bonne direction sur la façon de gérer ce problème de style ES7? Ou dois-je simplement utiliser des promesses?
Merci!
Il se peut que vous n'ayez pas trouvé de résultats car async/await
est une fonction ES7 et non ES6, elle est disponible dans le nœud> = 7.6.
Votre code fonctionnera dans le nœud. J'ai testé le code suivant
var express = require('express');
var app = express();
async function wait (ms) {
return new Promise((resolve, reject) => {
setTimeout(resolve, ms)
});
}
app.get('/', async function(req, res){
console.log('before wait', new Date());
await wait(5 * 1000);
console.log('after wait', new Date())
res.send('hello world');
});
app.listen(3000, err => console.log(err ? "Error listening" : "Listening"))
Et voila
MacJamal:messialltimegoals dev$ node test.js
Listening undefined
before wait 2017-06-28T22:32:34.829Z
after wait 2017-06-28T22:32:39.852Z
^C
Fondamentalement, vous l'avez, vous devez async
une fonction pour await
sur une promesse à l'intérieur de son code. Ceci n'est pas pris en charge dans le nœud LTS v6, il peut donc être utilisé babel pour transpiler le code. J'espère que cela t'aides.
Je pense que vous ne pouvez pas le faire directement car les exceptions ne sont pas prises et la fonction ne reviendra pas si une est levée. Cet article explique comment créer une fonction wrapper pour la faire fonctionner: http://thecodebarbarian.com/using-async-await-with-mocha-express-and-mongoose.html
Je ne l'ai pas essayé, mais j'enquêtais récemment.
Utilisez express-promise-router .
const express = require('express');
const Router = require('express-promise-router');
const router = new Router();
const mysql = require('mysql2');
const pool = mysql.createPool({
Host: 'localhost',
user: 'myusername',
password: 'mypassword',
database: 'mydb',
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
}).promise();
router.get('/some_path', async function(req, res, next) {
const [rows, ] = await pool.execute(
'SELECT * ' +
'FROM mytable ',
[]
);
res.json(rows);
});
module.exports = router;
(Ce qui précède est un exemple d'utilisation de l'interface de promesse de mysql2 avec express-promise-router
.)
----------------------------------------------------------------------------------------------------------------
async function GetTripSummary(trip_id, vin, job_id)
{
return new Promise((resolve, reject) => {
var tid = "Some-ID";
var options = {
"method": "GET",
"hostname": "automotive.internetofthings.ibmcloud.com",
"port": 443,
"path": "/driverinsights/drbresult/tripSummaryList?trip_id=" + trip_id + "&tenant_id=" + tid + "&mo_id=" + vin + "&job_id=" + job_id,
"headers": {
"accept": "application/json",
"content-type": "application/json",
'Authorization': 'Basic ' + new Buffer("Something" + ':' + "Something").toString('base64')
}
};
var req = https.request(options, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.Push(chunk);
});
res.on("end", function () {
var body = Buffer.concat(chunks);
console.log("[1]Map Matched Data Received From ContextMapping: \n\t")
console.log(body.toString());
var data = JSON.parse(body);
resolve(data);
});
res.on('error', function (e) {
reject('problem with request: ' + e.message);
});
});
req.end();
});
}
----------------------------------------------------------------------------------------------------------------
router.get('/cgcc/trip/start/:vin/:uid/:tripid', async function(req, res)
{
try {
var lvin = req.params.vin;
var user_id = req.params.uid;
var trip_id = req.params.tripid;
CC_Trip.find({ trip_id: trip_id, user_id: user_id, vin: lvin }, function (err, trips) {
//! A given user with same phone number exists*/
if ((trips == undefined) || (trips.length <= 0) || (err != null)) {
//! End Processing
res.send({
"user":
{
"responseCode": "409",
"userId": trip_id,
"messasge": "Trip does not exist"
}
});
}
else //! User Exists
{
if (trips[0].moma_job_status == "SUCCEEDED") {
const response = await GetTripSummary(trips[0].trip_id, trips[0].vin, trips[0].moma_job_id);
return response;
}
else {
res.send({
"user":
{
"responseCode": "301",
"userId": trip_id,
"messasge": "Background Analysis still going on"
}
});
}
}
});
}
catch (e)
{
console.log(body.toString());
}
});
===========================================================================================================================
I keep on getting this error while compiling
const response = await GetTripSummary(trips[0].trip_id, trips[0].vin, trips[0].moma_job_id);
^^^^^^^^^^^^^^
SyntaxError: Unexpected identifier
at createScript (vm.js:74:10)
at Object.runInThisContext (vm.js:116:10)
at Module._compile (module.js:533:28)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
at Module.require (module.js:513:17)
at require (internal/module.js:11:18)
at Object.<anonymous> (D:\PES_CC_POC\app.js:18:13)
at Module._compile (module.js:569:30)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:503:32)
at tryModuleLoad (module.js:466:12)
at Function.Module._load (module.js:458:3)
at Module.require (module.js:513:17)
Waiting for the debugger to disconnect...
===========================================================================================================================