node js - throw new Error('发送后无法设置标题。');

时间:2017-09-05 09:46:27

标签: node.js

我得到的标题错误。 以下是我的代码。请你有人给我建议吗?

我想我每次'app.get'只发送一次 我想为index.html和splash.html分配案例。 在作出回应之前,我想延迟1秒钟。

app.use(delay(1000));
app.get('/index.html', function(req, res) {
    var pathName = req.url;
    console.log('!!!!!!!!!!!');
    console.log(pathName);

    fs.readFile(__dirname + '/views/index.html', function(error, data) {
        console.log(__dirname);
        if(error){
            console.log(error);
        } else {
            console.log("load html");
            console.log(req.url);
            csp.add(req, res, options);
            res.render(__dirname + '/views/index.html');
            res.end();
        }
    });    
});


app.get('/splash.html', function(req, res) {
    var pathName = req.url;
    console.log('!!!!!!!!!!!');
    console.log(pathName);


    fs.readFile(__dirname + '/views/splash.html', function(error, data) {
        console.log(__dirname);
        if(error){
            console.log(error);
        } else {
            console.log("load html");
            console.log(req.url);
            csp.add(req, res, options);
            res.render(__dirname + '/views/splash.html');
            res.end();
        }
    });    
});

2 个答案:

答案 0 :(得分:1)

尝试在res.end()之后删除res.renderrender将结束回复。如果您想设置任何标题,请在此之前执行此操作。

实现延迟的最佳方法是在发送响应之前使用setTimeout

答案 1 :(得分:1)

实现此目的的最佳方法是使用rx模块,请参阅下面的代码。响应在3秒后发送,这是我用于延迟的模块。

var app = require('express')();
const timeout = require('connect-timeout');
const Rx = require('rx');

// Response will be delayed for 3 seconds
app.get('/', function(req, res) {
  Rx.Observable.create((observer) => {
    observer.onNext({
      response: 'potato'
    })
    observer.onCompleted()
  })
    .delay(new Date(Date.now() + 3000))    //setting it to 3 seconds
    .subscribe((x) => {
      console.log(x);                   //logs response: 'patato'
      console.log('this runs');
      res.status(200).send("3 seconds");
    }, (e) => {
      console.log('this does not');
    })
  });

app.listen(4000);