gpt4 book ai didi

javascript - mongoDB 和 Express 的请求尚未完成错误

转载 作者:行者123 更新时间:2023-12-03 01:45:56 24 4
gpt4 key购买 nike

我收到一条消息请求尚未完成,如果我在应用程序中修补和删除请求(post 和 get 请求运行良好),则不会发送任何数据

这是我的要求

在服务中(前面,Angular 4)我创建请求

  api = 'http://localhost:3000/tasks';
deleteData(id) {
return this.http.delete( this.api, id);
}

patch(data) {
return this.http.patch( this.api, data);
}

然后在组件中调用它们 this.deleteData(this.checkedItems);

 this.service.patch(result.data).subscribe(d => {
this.tasks = d;
});

服务

PATCH 请求通过 console.log 获取 req.body - 所以它应该可以工作,但事实并非如此

DELETE请求没有获取任何数据! req.body 为空!但我需要传递 ids 数组,所以我无法通过 params 来做到这一点。

您能帮助我或给我一个提示吗?这是我的服务

const express = require('express');
const path = require('path');
const http = require('http');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const cors = require('cors');
var Schema = mongoose.Schema;

const app = express();
//Middleware for CORS
app.use(cors());
app.use(express.json());

// Parsers for POST data
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));

// Point static path to dist
app.use(express.static(path.join(__dirname, 'dist')));

var todoSchema = new Schema({
taskName: String,
createdAt: Date,
isDone: Boolean,
prioraty: String
}, {
collection: 'tasks'
});

var Model = mongoose.model('Model', todoSchema);
//replace when DB is online
mongoose.connect('mongodb://localhost:27017/admin').then(() => {
console.log("connected");
}).catch (() => {
console.log("not connected");
});
mongoose.connection.once('open', function () {
console.log('mongodb connected.');
});

app.patch('/tasks', function (req, res) {
console.log(req.body);
var updateObject = {
'taskName': req.body.taskName,
'isDone': req.body.isDone,
'prioraty': req.body.prioraty
}
var id = req.body._id;
Model.collection.update({_id : id}, {$set: updateObject});
});

app.delete('/tasks', function(req,res){
console.log('Delete', req.body);
var ids = [];
for (let i = 0; i < req.body.length; i ++) {
ids.push(req.body[i]._id);
}
var myquery = { _id: { $in: ids } };
Model.collection.deleteMany(myquery, function(err, obj) {
if (err) throw err;
});
});

const port = process.env.PORT || '3000';
app.set('port', port);

/**
* Create HTTP server.
*/
const server = http.createServer(app);

/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port, () => console.log(`API running on localhost:${port}`));

最佳答案

处理完请求后需要关闭连接,否则客户端将等待服务器发送响应,直到请求超时。

app.patch('/tasks', function (req, res) {
...
Model.collection.update({_id : id}, {$set: updateObject}, function (err) {
if (err) {
console.error(err);
return res.sendStatus(500);
}
res.sendStatus(200);
});
});

app.delete('/tasks', function(req,res){
...
Model.collection.deleteMany(myquery, function(err) {
if (err) {
console.error(err);
return res.sendStatus(500);
}
res.sendStatus(200);
});
});

至于 DELETE 请求没有 req.body,那是因为 Angular 4 的 http 客户端不允许 DELETE 的主体要求。它的 DELETE 请求 API 如下所示:this.http.delete(url, httpOptions),没有正文支持。如果需要发送 id 数组,则必须使用查询参数。查询参数确实支持数组,它们看起来像这样:https://myurl.xyz/tasks?ids[]=1&ids[]=2&ids[]=3
请参阅https://angular.io/guide/http#url-parameters

关于javascript - mongoDB 和 Express 的请求尚未完成错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50642561/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com