首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Express JS应用程序进程多次请求

Express JS应用程序进程多次请求
EN

Stack Overflow用户
提问于 2017-03-20 13:47:14
回答 1查看 736关注 0票数 0

我目前正在创建一个应用程序,它使用Sencha作为前端部分和Node来处理用户请求和从MongoDB获取数据

当我试图将数据插入到mongoDB时。Ext通过ajax发送请求。它插入成功,但当我再次插入时。它插入第二个请求两次。

以下是我的server.js片段

代码语言:javascript
代码运行次数:0
运行
复制
Server.js

var express = require('express')
var app = express() 
var form = require('formidable')
var document = require('/models/Document.js')


var db = .... //connection to my mongodb instance
app.post('/insertDocument', function(req, res){
    document.insertDocument(req, form, db, function(info){
       return res.end(info) 
    });
});

我使用res.end作为post请求,因为当我使用res.send或res.json发送第二个请求时,它会给我一个错误。发完头后不能发送标头。

代码语言:javascript
代码运行次数:0
运行
复制
Document.js
module.exports = {
    insertDocument: function(req, form, db, callback){
        var collection = db.collection('HD_Documents');
        form.parse(req, function(err, fields, files){
            collection.insert({
                name: fields.name,
                .
                .
                .
                .
            },function(er, info){
                if(er){
                    callback("{'success':false}");
                }else{
                    callback("{'success':true}")
                }
            })
        })
    }

}

就像我说的,插入正确。但在第二次插入请求时。它将数据插入两次。我在chrome developer tools中检查了网络选项卡。我看到客户只发送了一个请求。但是节点js服务器处理它两次。

我不知道为什么。拜托我需要帮助。我认为使用res.send或res.json可以解决这个问题,但就像我说的那样,它给了我一个错误。

任何帮助都将不胜感激。:)

编辑原来是经过两次处理的form.parse的强大。我不知道为什么还叫两次

EN

回答 1

Stack Overflow用户

发布于 2020-01-02 10:54:40

您只需要在最后一行回调中使用res.end(),您的代码应该如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
    module.exports = function foo(req, res) {
        insertDocument: function(req, form, db, callback){
            var collection = db.collection('HD_Documents');
            form.parse(req, function(err, fields, files){
                collection.insert({
                    name: fields.name,
                    .
                    .
                    .
                    .
                },function(er, info){
                    if(er){
                        callback("{'success':false}");
                    }else{
                        callback("{'success':true}")
                    }
                })
                res.end()
            })
        }

    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42905281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档