相关疑难解决方法(0)

Express.js - 如何检查标头是否已发送?

我正在写一个可以设置标题的库.如果标头已经发送,我想给出一个自定义错误消息,而不是让它失败,Node.js给出的"无法在发送标题后设置标题".那么如何检查标头是否已经发送?

javascript node.js response-headers express

65
推荐指数
3
解决办法
3万
查看次数

在api调用中更新2个mongoose模式

目前我正在尝试在api调用中更新两个不同的用户架构.

第一个模式记录在用户模式中,我们给它命名= Tom第二个模式是注册该应用程序的其他用户,我们给它命名= John

架构代码

schema.js

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var bcrypt = require('bcrypt-nodejs');



var UserSchema = new Schema({
    name: String,
    username: { type: String, required: true, index: { unique: true }},
    password: { type: String, required: true, select: false },
    followers: [{ type: Schema.Types.ObjectId, ref: 'User'}],
    following: [{ type: Schema.Types.ObjectId, ref: 'User'}],
    followersCount: Number,
    followingCount: Number

});


module.exports = mongoose.model('User', UserSchema);
Run Code Online (Sandbox Code Playgroud)

api名称是'/ follow /:user_id',我想要实现的是.每当用户Tom跟随John这样的其他用户时,Tom的跟随字段将被更新以及John的跟随者字段.

我当前的尝试(req.decoded.id是登录用户)

api.js

// The first way

apiRouter.post('/follow/:user_id', …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js mean-stack

9
推荐指数
1
解决办法
652
查看次数

快速重定向错误:发送后无法设置标头

当此代码命中重定向行时,它会抛出"在发送错误后无法设置标头"并且不会重定向.我对没有完全理解标题以及如何表达与它们一起工作感到内疚.关于这个错误的这个链接让我感到困惑,可能是因为我对正在发生的事情没有基本的了解.此外,我知道这是一种天真的验证方法,但我只是想让基本的东西工作.

    app.post('/api/login', function(req, res) {
    if (req.body.password === auth.password) {
        auth.date = new Date()
        res.redirect('/admin')
      } else {
        console.log("wrong pw")
      }
    })
Run Code Online (Sandbox Code Playgroud)

更新:谢谢@Brendan Ashworth我错过了一个显而易见的其他内容,我现在已经添加了,不再收到错误.

但是这一行不会改变我页面的内容

res.sendfile('./public/admin/views/tunes.html')
Run Code Online (Sandbox Code Playgroud)

它在我用auth检查包装它之前有效

var auth = require('../config/auth')

module.exports = function(app) {

/*
 *  CONTENT API
 */

 //...

/*
 *  Admin Routes
 */
app.get('/admin/login', function(req, res) {
    res.sendfile('./public/admin/views/login.html')
})

app.post('/api/login', function(req, res) {
    if (req.body.password === auth.password) {
        auth.date = new Date()
        res.redirect('/admin')
    } else {
        res.json({message: 'Wrong password!'})
    }
})

app.get('/admin', function(req, res) { …
Run Code Online (Sandbox Code Playgroud)

node.js express

8
推荐指数
1
解决办法
3万
查看次数

JQuery表单插件文件上传使用POST重定向到POST响应

请帮帮忙,这个是一个主要的BLOCKER!

我有一个使用NodeJS + jQuery Form Plugin + Typescript的项目,我正在尝试上传文件.文件上传后,服务器会向POST消息发送响应,该消息在屏幕上呈现.在POST响应呈现在屏幕上之前,文件确实已成功上传.我希望POST响应调用"成功"函数,而不是重定向页面以显示JSON响应.

这是代码:

$(new ID().setAsRoot().selectId()).append(
    "<form id=\"fileUploadForm\" accept-charset=\"utf-8\" method=\"post\" action=\"/upload\" enctype=\"multipart/form-data\">" +
        "<input id = \"filename\" type=\"file\" name=\"userfile\" multiple=\"multiple\" />" +
        "<button type=\"submit\" id = \"submitButton\"> Upload </button></form>");

var form = $("#fileUploadForm");
form.submit(function (e) {
    //e.preventDefault();
    this.ajaxSubmit({
        type: form.attr('method'),
        url: form.attr('action'),
        data: form.serialize(),
        success: function (data) {
            var x = JSON.parse(data);
            alert("Success : " + x);
        },
        error: function (data) {
            var x = JSON.parse(data);
            alert("Error : " + x);
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

不会调用success函数(这意味着警报消息不会显示).JSON数据只是在屏幕上呈现如下: …

jquery post jquery-forms-plugin

5
推荐指数
1
解决办法
4631
查看次数

Nodejs发送部分响应

mongodb集合中有20,000条记录.我在csv中导出所有这些记录.我使用这个发送部分响应:

res.writeHead(200, {
                     "Content-Type": "application/csv",
                     "Content-disposition": "attachment; filename='import.csv'"
 });

res.write(data + '0', "binary");
Run Code Online (Sandbox Code Playgroud)

上面的代码以500的批量执行.我在处理所有记录时使用此代码结束.

if (++responseCount == loopCount) {
  res.end();
}
Run Code Online (Sandbox Code Playgroud)

但我得到了这个错误:

发送后无法设置标头.

但我得到的文件下载了500条记录.

这是我的完整代码.

var exportData = function (req, res, next) {

var limit = 500;
var responseCount = 0;
var loopCount = 1;
var size = 30000;

//Get 500 records at one time
var getData = function (req, start, cb) {
    req.db.collection('items').find().skip(start).limit(limit).toArray(function (err, records) {
        if (err) throw err;
        cb(null, records);
    });
};

if (size > limit) { …
Run Code Online (Sandbox Code Playgroud)

csv node.js export-to-csv

5
推荐指数
1
解决办法
4314
查看次数

Heroku crash over and over by POST request, multer or nodemailer H=18

My deployment on Heroku keep crashing on the POST request when I send the mulitpart form. I can't see in the logs if it's on the upload (multer) function, save (mongoose) function or sendMail (nodemailer) function. The only thing I see in the logs is a H18 error: Internal Server.

Router.js

const express = require("express");
const mongoose = require("mongoose");
const router = express.Router();
const multer = require("multer");
const path = require("path");
const File = require("../models/Files");
const mail = require("../handlers/mailer");

// …
Run Code Online (Sandbox Code Playgroud)

deployment heroku node.js nodemailer multer

5
推荐指数
1
解决办法
2916
查看次数

res.sendFile() 错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头

我正在使用express 构建一个简单的服务器。一切正常,但每次我尝试硬刷新(cntr + R)我的页面时,我都会在控制台中收到这个恼人的错误。

错误 [ERR_HTTP_HEADERS_SENT]:将标头发送到客户端后无法设置标头

这是代码:

app.get('/index', (req, res) => {
    const filePath = path.join(__dirname, 'public', 'index.html');
    console.log(res.headersSent);
    res.sendFile(filePath);
});
Run Code Online (Sandbox Code Playgroud)

console.log (res.headersSent)用于检查是否确实未设置标头(每次都会记录 false)。

我尝试发送一个简单的 JSON 而不是文件,并且没有发生错误:

app.get('/index', (req, res) => {
    const filePath = path.join(__dirname, 'public', 'index.html');
    console.log(res.headersSent);
    res.json({status: 'All good'});
});
Run Code Online (Sandbox Code Playgroud)

仅当我使用 res.sendFile() 时才会出现该错误。一旦加载,index.html将请求一个index.js文件。也许这就是问题所在?但这不是一个不同的要求吗?

谢谢你!

编辑我尝试检查 sendFile() 回调函数中的错误。它是未定义的,即使控制台不断吐出“无法设置标头”错误

runtime-error http-headers node.js express server

5
推荐指数
1
解决办法
1182
查看次数

具有快速的节点发射器

我想在后端进行串行工作.我想选择geo_unit并做另一项工作并向客户端写回复.我阅读了 http://nodejs.org/docs/v0.4.7/api/events.html#events错误:无法在将标题发送到客户端后设置标题

当我慢慢发送请求时,一切正常,例如每3秒发送一次.

但是当我快速发送请求时它不起作用.我得到以下错误.我是否在全球定义了什么?


Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (http.js:691:11)
    at ServerResponse.res.setHeader (E:\git\xxxxxx-nodejs\node_modules\express\node_modules\connect\lib\patch.js:63:22)
    at ServerResponse.res.set.res.header (E:\git\xxxxxx-nodejs\node_modules\express\lib\response.js:527:10)
    at ServerResponse.res.json (E:\git\xxxxxx-nodejs\node_modules\express\lib\response.js:194:36)
    at EventEmitter. (E:\git\xxxxxx-nodejs\routes\api_scrapper.js:17:17)
    at EventEmitter.emit (events.js:117:20)
    at ScrapperAPI.externalLocationCallback (E:\git\xxxxxx-nodejs\routes\api_scrapper.js:27:20)
    at Query._callback (E:\git\xxxxxx-nodejs\routes\api_scrapper.js:51:21)
    at Query.Sequence.end (E:\git\xxxxxx-nodejs\node_modules\mysql\lib\protocol\sequences\Sequence.js:78:24)
    at Query._handleFinalResultPacket (E:\git\xxxxxx-nodejs\node_modules\mysql\lib\protocol\sequences\Query.js:143:8)


我使用以下代码:


var express = require('express'),
  http = require('http'),
  path = require('path');

var app = module.exports = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var request = require('request');
var cheerio = require('cheerio');


var mysql = …

node.js express

3
推荐指数
1
解决办法
2249
查看次数

路由错误:错误:发送后无法设置标头

好吧,在我阅读了很多有关此问题的帖子后,我开始停滞不前.这个错误很受欢迎Error: Can't set headers after they are sent.

最好的答案在这里,但是,我没有重复的功能或两次执行的回调(至少不是我知道的),它只是一个标准的基础休息API.

完整跟踪日志:

/home/nano/Dev/JS/OMI/node_modules/mongoose/lib/utils.js:413
        throw err;
              ^
Error: Can't set headers after they are sent.
    at ServerResponse.OutgoingMessage.setHeader (http.js:689:11)
    at ServerResponse.header (/home/nano/Dev/JS/OMI/node_modules/express/lib/response.js:666:10)
    at ServerResponse.send (/home/nano/Dev/JS/OMI/node_modules/express/lib/response.js:146:12)
    at ServerResponse.json (/home/nano/Dev/JS/OMI/node_modules/express/lib/response.js:235:15)
    at Promise.<anonymous> (/home/nano/Dev/JS/OMI/app/routes/clientes.js:19:11)
    at Promise.<anonymous> (/home/nano/Dev/JS/OMI/node_modules/mongoose/node_modules/mpromise/lib/promise.js:172:8)
    at Promise.emit (events.js:95:17)
    at Promise.emit (/home/nano/Dev/JS/OMI/node_modules/mongoose/node_modules/mpromise/lib/promise.js:84:38)
    at Promise.reject (/home/nano/Dev/JS/OMI/node_modules/mongoose/node_modules/mpromise/lib/promise.js:111:15)
    at Promise.error (/home/nano/Dev/JS/OMI/node_modules/mongoose/lib/promise.js:95:15)
Run Code Online (Sandbox Code Playgroud)

无论如何,我的代码很简单:

index.js:

"use strict";

var express = require('express'),
    router  = express.Router();

var clientes = require('./clientes');
var items    = require('./items');

router.route('/clientes')
  .post(clientes.crear)
  .put(clientes.actualizar)
  .delete(clientes.borrar);

router.route('./items') …
Run Code Online (Sandbox Code Playgroud)

javascript node.js express

2
推荐指数
1
解决办法
8119
查看次数

Node.js和Express.js错误:发送后无法设置标头

我是节点之地的新手,我有一个像下面的情况,我首先想要设置一个cookie,然后重定向到其他网址.但是我得到了错误 - Unhandled rejection Error: Can't set headers after they are sent.

user_details = [req.body.user_name, req.body.user_email, req.body.user_contact, req.body.route_id];
var user_details_str = JSON.stringify(user_details);
res.cookie('user_details', user_details_str, {maxAge : 7 * 24 * 3600000, httpOnly:false});
res.redirect('/route1');
Run Code Online (Sandbox Code Playgroud)

我经历了这个Node.js错误:在发送之后无法设置标头并且理解res.redirect()为尝试重写标头但不知道如何解决此问题.

编辑:完整的代码.

router.post('/register', encryptor.encryptUserPassword, function(req, res, next) {
  req.body.confirmed = false;

  Models.users.create(req.body).then(function(user) {


    user_details = [req.body.user_name, req.body.user_email, req.body.user_contact, req.body.route_id];
    var user_details_str = JSON.stringify(user_details);
    res.cookie('user_details', user_details_str, {maxAge : 7 * 24 * 3600000, httpOnly:false});

    user.user_pass = '';
    sess = res.session;
//    sess.email = …
Run Code Online (Sandbox Code Playgroud)

javascript cookies http node.js express

0
推荐指数
1
解决办法
2905
查看次数

nodejs 错误是发送后无法设置标头

您好,我遇到此错误,但我不明白为什么会出现该错误,请帮我解决它。

var fs = require("fs");
var port = 3000;

//Creating pool conection database
var mysql = require("mysql");

function ConnectDB()
{
    this.result = "r";
    this.conexion = mysql.createPool
    ({
        host: "localhost",
        user: "root",
        password: "rometotalwar2",
        database: "WebDatabase"
    });


    this.SignUpUser = function(nombre,apellidos,nick,pass,email,callback)
    {   

        var querystring = "SELECT Nickname,Correo from Users WHERE Nickname='"+nick+"' and Correo='"+email+"';";
        this.conexion.getConnection(function(err, connection)
        {   
            if(err)
            {
                
            }
            else
            {
                connection.query(querystring,function(err,result,fields)
                {
                    if(err)	
                    {
                    }
                    else
                    {                
                        if(result.length != 0)
                        {
                            callback("NO");
                        }
                        else
                        {
                            var querystring = "INSERT INTO Users …
Run Code Online (Sandbox Code Playgroud)

javascript node.js

0
推荐指数
1
解决办法
2443
查看次数