我无法从方法getuserpost
获取数据。网页卡住了,并没有显示任何内容。
其余代码可以很好地添加和删除数据,然后重定向到主页,但该方法不显示JSON输出。我尝试使用res.send
和res.render
,但没有尝试。
有人知道这段代码有什么问题吗?
app.get('/getuser', (req, res) => {
res.render('getuser');
});
//DOESN'T WORK
app.post('/getuserpost', (req, res) => {
const query = datastore.createQuery('usersTable').filter('girl', req.body.girl_field).order('timestamp', { descending: true }).limit(10);
datastore.runQuery(query).then((results) => {
const entities = results[0];
res.json(entities[0]);
});
});
这是该方法的HTML:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<form action="/getuserpost/" method="POST">
<label for="girl_name">Enter girl: </label>
<input id="girl_name" type="text" name="girl_field" value="Default girl for user">
<input type="submit" value="OK">
</form>
<br>
<a href="/home">Home</a>
<br>
<a href="/adduser">Add user</a>
<br>
<a href="/updateuser">Update user</a>
<br>
<a href="/deleteuser">Delete user</a>
<br>
</body>
</html>
我正在将Google数据存储区与Google App Engine结合使用。
答案 0 :(得分:0)
我猜你错过了过滤器中的操作员选项。
.filter('girl', "=", req.body.girl_field)
答案 1 :(得分:0)
app.get('/getuser', (req, res) => {
res.render('getuser');
});
//WORKS
app.post('/getuserpost', (req, res) => {
/*const query = datastore.createQuery('usersData').filter('girl',
req.body.girl_field).order('timestamp', { descending: true }).limit(10);
datastore.runQuery(query).then((results) => {
const entities = results[0];
datastore.get(entities[0][datastore.KEY], (err, entity)=>{
if(!err){
res.json(entity);
}else{
console.log(err);
}
});
});*/
res.send("output");
});
问题出在getuserpost里面的代码,当我评论代码它工作但是当我删除res.send(&#34;输出&#34;)并取消注释代码它卡住了。 这个评论版本既不起作用也不起作用。 下面的删除方法有效,其查询有效
app.get('/deleteuser', (req, res) => {
res.render('deleteuser');
});
//WORKS
app.post('/deleteuserpost', (req, res) => {
const query = datastore.createQuery('usersData').filter('car', req.body.car_field);
datastore.runQuery(query).then((results) => {
const entities = results[0];
datastore.delete(entities[0][datastore.KEY], (err) => {
if (!err) {
res.redirect('/');
}
});
});
});
答案 2 :(得分:0)
从&#34; DATASTORE&#34;读取数据的解决方案IN&#34; APP ENGINE&#34;使用&#34; NODE JS&#34;:
app.get('/getuser', (req, res) => {
res.render('getuser');
});
//WORKS
app.post('/getuserpost', (req, res) => {
const query = datastore.createQuery('usersData').filter('girl',
req.body.girl_field);
datastore.runQuery(query).then((results) => {
const entities = results[0];
datastore.get(entities[0][datastore.KEY], (err, entity) => {
if (!err) {
res.send(entity);
}
});
});
});
答案 3 :(得分:0)
使用“NODE JS”从“APP引擎”中添加“DATASTORE”数据的解决方案:
//WORKS
app.post('/adduserpost', (req, res) => {
const user = {
timestamp: new Date,
name: req.body.name_field,
girl: req.body.girl_field,
car: req.body.car_field
}
datastore.save({
key: datastore.key('usersData'),
data: user
}).then(() => {
res.redirect('/');
}).catch((err) => {
res.redirect('/');
});
});
答案 4 :(得分:0)
来自&#34; DATASTORE&#34;更新数据的解决方案IN&#34; APP ENGINE&#34;使用&#34; NODE JS&#34;:
//WORKS
app.post('/updateuserpost', (req, res) => {
const query = datastore.createQuery('usersData').filter('car', req.body.car_field);
datastore.runQuery(query).then((results) => {
let entities = results[0];
entities[0].car = req.body.new_car_field;
const entity = {
key: entities[0][datastore.KEY],
data: entities[0],
};
datastore.update(entity).then(() => {
res.redirect('/');
});
});
});
答案 5 :(得分:0)
您需要对字段
girl
和timestamp
进行综合索引编制。 关于综合索引的文档here。
您的yaml文件应包含以下内容
- kind: usersTable
properties:
- name: girl
- name: timestamp
direction: desc
要应用复合索引,请运行以下命令
gcloud -q datastore create-indexes path/to/yaml/file