具有明确原因的 req 对象导致 UnhandledPromiseRejectionWarning
req object with express causes UnhandledPromiseRejectionWarning
我从 Google 的数据存储教程中改编了以下代码。我隐约知道 Promises,我正在使用 await 我可以弄清楚这样做的地方。我已经使用 req
对象和 express 如下所示,没有发生任何意外,但这里似乎是空的。
它导致这个错误:
2021-04-16 04:55:03 default[20210415t215354] (node:10) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'name' of undefined
[截图]
name
是对我指定的参数的引用:
curl -X POST https://MYURL/gizmos --data 'name=foo&type=bar&len=29'
我做错了什么?我该如何避免这种情况?
/**
* @param {object} gizmo The gizmo record to insert.
*/
const insertGizmo = gizmo => {
return datastore.save({
key: datastore.key('gizmo'),
data: gizmo,
});
};
/**
* Retrieve the latest gizmo
*/
const getLastGizmo = () => {
const query = datastore
.createQuery('gizmo')
.order('createTime', {descending: true})
.limit(1);
return datastore.runQuery(query).then( (entities) => {
return entities[0].map(fromDatastore);
});
};
//Create a Gizmo
app.post('/gizmos', async (req, res, next) => {
const createTime = new Date();
const gizmo = {
name: req.body.name,
type: req.body.type,
length: req.body.len,
createTime: createTime,
};
try {
await insertGizmo(gizmo);
const newGizmo = await getLastGizmo();
//const [newGizmos] = await getLastGizmo();
await insertGizmo(gizmo);
const newGizmo = await getLastGizmo();
//const [newGizmos] = await getLastGizmo();
const gizmoUrl = "https://MYURL/gizmos/"+newGizmo.id;
const resText = {
"id" : newGizmo.id,
"name" : newGizmo.name,
"type" : newGizmo.type,
"length" : newGizmo.length,
"self" : gizmoUrl,
};
res.status(201).set('Content-Type', 'text/plain').send(resText).end();
} catch (error) {
next(error);
}
});
根据@hoangdv,在某处添加app.use(express.urlencoded())
。如果你问我的话,node-ish 不会将它作为默认值。
我从 Google 的数据存储教程中改编了以下代码。我隐约知道 Promises,我正在使用 await 我可以弄清楚这样做的地方。我已经使用 req
对象和 express 如下所示,没有发生任何意外,但这里似乎是空的。
它导致这个错误:
2021-04-16 04:55:03 default[20210415t215354] (node:10) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'name' of undefined
[截图]
name
是对我指定的参数的引用:
curl -X POST https://MYURL/gizmos --data 'name=foo&type=bar&len=29'
我做错了什么?我该如何避免这种情况?
/**
* @param {object} gizmo The gizmo record to insert.
*/
const insertGizmo = gizmo => {
return datastore.save({
key: datastore.key('gizmo'),
data: gizmo,
});
};
/**
* Retrieve the latest gizmo
*/
const getLastGizmo = () => {
const query = datastore
.createQuery('gizmo')
.order('createTime', {descending: true})
.limit(1);
return datastore.runQuery(query).then( (entities) => {
return entities[0].map(fromDatastore);
});
};
//Create a Gizmo
app.post('/gizmos', async (req, res, next) => {
const createTime = new Date();
const gizmo = {
name: req.body.name,
type: req.body.type,
length: req.body.len,
createTime: createTime,
};
try {
await insertGizmo(gizmo);
const newGizmo = await getLastGizmo();
//const [newGizmos] = await getLastGizmo();
await insertGizmo(gizmo);
const newGizmo = await getLastGizmo();
//const [newGizmos] = await getLastGizmo();
const gizmoUrl = "https://MYURL/gizmos/"+newGizmo.id;
const resText = {
"id" : newGizmo.id,
"name" : newGizmo.name,
"type" : newGizmo.type,
"length" : newGizmo.length,
"self" : gizmoUrl,
};
res.status(201).set('Content-Type', 'text/plain').send(resText).end();
} catch (error) {
next(error);
}
});
根据@hoangdv,在某处添加app.use(express.urlencoded())
。如果你问我的话,node-ish 不会将它作为默认值。