【问题标题】:how to redirect to another page from a node.js server如何从 node.js 服务器重定向到另一个页面
【发布时间】:2020-04-21 18:08:52
【问题描述】:

这几天我一直在苦苦挣扎,我想从我的 node.js 服务器重定向到另一个页面。 首先通过网站将我重定向到我的服务器以执行一项任务,但是当该任务完成后,我希望服务器将我重定向回我的网站。 这是节点js服务器代码。

var http = require('http');
var url = require('url');
var MongoClient = require('mongodb').MongoClient;
var mongourl = "mongodb://localhost:27017/";

http.createServer(function (req, res) {
    res.writeHead(200, {
        'Content-Type': 'text/html'
    });
    var urlQuery = url.parse(req.url, true).query;
    removeItem(urlQuery.itemToRemove);
    addItem(urlQuery.itemToAdd);
    **// i have been trying to redirect to my html site **
    **// i have got a error saying TypeError: res.redirect is not a function**
    res.redirect('index.html');
    res.end();
}).listen(8080);



function removeItem(remove) {
    if (remove !== undefined) {
        MongoClient.connect(mongourl, function (err, db) {
            if (err) throw err;
            var dbo = db.db("mydb");
            var myquery = {
                itemName: remove
            };
            dbo.collection("shoppingCart").deleteOne(myquery, function (err, obj) {
                if (err) throw err;
                console.log("deleted:" + myquery);
                db.close();
            });
        });
    }
}

function addItem(create) {
    if (create !== undefined) {
        MongoClient.connect(mongourl, function (err, db) {
            if (err) throw err;
            var dbo = db.db("mydb");
            var myobj = {
                itemName: create
            };
            dbo.collection("shoppingCart").insertOne(myobj, function (err, res) {
                if (err) throw err;
                console.log("document inserted:" + myobj);
                db.close();
            });
        });
    }
}

【问题讨论】:

  • 重定向时是否遇到任何错误?或者您面临什么问题?
  • TypeError: res.redirect 不是函数

标签: node.js mongodb


【解决方案1】:

TypeError: res.redirect 不是函数

这是因为res.redirect 是一个快速函数,而您使用的是普通的http 节点服务器。

您可以考虑使用express 为您处理重定向。

var http = require('http');
var url = require('url');
var MongoClient = require('mongodb').MongoClient;
var mongourl = 'mongodb://localhost:27017/';

// express
const express = require('express');
const app = express();
const port = 8080;

// for templating
// create `views/` folder
// and place `index.pug` and `redirected-page.pug`
app.set('view engine', 'pug');

app.get('/redirect', (req, res) => {
  res.render('redirected-page');
});

app.get('/', (req, res) => {
  var urlQuery = url.parse(req.url, true).query;
  Promise.all([
    removeItem(urlQuery.itemToRemove),
    addItem(urlQuery.itemToAdd),
  ]).then(() => {
    res.redirect('redirect');
  });
});

app.use(function(err, req, res, next) {
  console.error(err.stack);
  res.status(500).send('Something broke!');
});

function removeItem(remove) {
  if (remove !== undefined) {
    MongoClient.connect(mongourl, function(err, db) {
      if (err) throw err;
      var dbo = db.db('mydb');
      var myquery = {
        itemName: remove,
      };
      dbo.collection('shoppingCart').deleteOne(myquery, function(err, obj) {
        if (err) throw err;
        console.log('deleted:' + myquery);
        db.close();
      });
    });
  }
}

function addItem(create) {
  if (create !== undefined) {
    MongoClient.connect(mongourl, function(err, db) {
      if (err) throw err;
      var dbo = db.db('mydb');
      var myobj = {
        itemName: create,
      };
      dbo.collection('shoppingCart').insertOne(myobj, function(err, res) {
        if (err) throw err;
        console.log('document inserted:' + myobj);
        db.close();
      });
    });
  }
}

app.listen(port, () => console.log(`Server is running at ${port}!`));

【讨论】:

    【解决方案2】:

    您没有正确创建服务器。尽量保持代码干净,为服务 index.html 编写单独的 API,而不是在创建服务器内部。

    【讨论】:

    【解决方案3】:

    您收到该错误是因为 response.redirect() 是一个快速函数,并且您的应用程序完全基于 nodejs http 库。

    您可以通过这种方式完成您提到的内容:

    res.writeHead(301,{Location: 'your-location'});
    res.end();
    

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多