如何从Node.js服务器重定向到另一个页面

huangapple go评论102阅读模式
英文:

how to redirect to another page from a node.js server

问题

这是Node.js服务器的代码,你想要在这里进行重定向。但是要注意,Node.js的http模块本身不提供直接的res.redirect函数。你需要使用res.writeHeadres.end来手动发送一个重定向响应。以下是代码的修改部分:

  1. http.createServer(function (req, res) {
  2. var urlQuery = url.parse(req.url, true).query;
  3. removeItem(urlQuery.itemToRemove);
  4. addItem(urlQuery.itemToAdd);
  5. // 手动进行重定向
  6. res.writeHead(302, {
  7. 'Location': '/index.html' // 重定向到index.html或你想要的URL
  8. });
  9. res.end();
  10. }).listen(8080);

这里我用res.writeHead设置了状态码为302,表示重定向,然后在响应头中设置了重定向的目标URL。这样,当请求到达服务器时,它将重定向到指定的URL。

英文:

i have been struggling for the pas few days i want to redirect to another page from my node.js server.
first by website is redirecting me to my server to do a task but when that task is done i want the server to redirect me back to my website.
here is the node js server code.

  1. var http = require('http');
  2. var url = require('url');
  3. var MongoClient = require('mongodb').MongoClient;
  4. var mongourl = "mongodb://localhost:27017/";
  5. http.createServer(function (req, res) {
  6. res.writeHead(200, {
  7. 'Content-Type': 'text/html'
  8. });
  9. var urlQuery = url.parse(req.url, true).query;
  10. removeItem(urlQuery.itemToRemove);
  11. addItem(urlQuery.itemToAdd);
  12. **// i have been trying to redirect to my html site **
  13. **// i have got a error saying TypeError: res.redirect is not a function**
  14. res.redirect('index.html');
  15. res.end();
  16. }).listen(8080);
  17. function removeItem(remove) {
  18. if (remove !== undefined) {
  19. MongoClient.connect(mongourl, function (err, db) {
  20. if (err) throw err;
  21. var dbo = db.db("mydb");
  22. var myquery = {
  23. itemName: remove
  24. };
  25. dbo.collection("shoppingCart").deleteOne(myquery, function (err, obj) {
  26. if (err) throw err;
  27. console.log("deleted:" + myquery);
  28. db.close();
  29. });
  30. });
  31. }
  32. }
  33. function addItem(create) {
  34. if (create !== undefined) {
  35. MongoClient.connect(mongourl, function (err, db) {
  36. if (err) throw err;
  37. var dbo = db.db("mydb");
  38. var myobj = {
  39. itemName: create
  40. };
  41. dbo.collection("shoppingCart").insertOne(myobj, function (err, res) {
  42. if (err) throw err;
  43. console.log("document inserted:" + myobj);
  44. db.close();
  45. });
  46. });
  47. }
  48. }

答案1

得分: 0

你遇到该错误是因为 response.redirect() 是一个 Express 函数,而你的应用程序纯粹基于 Node.js 的 http 库。

你可以通过以下方式实现你所提到的功能:

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

You are getting that error because response.redirect() is an express function and your app is based purely on nodejs http library.

You can accomplish what you have mentioned this way:

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

答案2

得分: 0

你没有正确地创建服务器。尽量保持代码整洁,编写单独的API用于提供index.html,不要将其放在创建服务器的内部。

英文:

You are not creating the server properly. Try to keep your code clean,Write separate API for serving index.html, not inside creating the server.

答案3

得分: 0

> TypeError: res.redirect is not a function

这是因为 res.redirect 是一个 Express 函数,而您正在使用纯粹的 http 节点服务器。

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

  1. var http = require('http');
  2. var url = require('url');
  3. var MongoClient = require('mongodb').MongoClient;
  4. var mongourl = 'mongodb://localhost:27017/';
  5. // express
  6. const express = require('express');
  7. const app = express();
  8. const port = 8080;
  9. // 用于模板化
  10. // 创建 `views/` 文件夹
  11. // 并放置 `index.pug` 和 `redirected-page.pug`
  12. app.set('view engine', 'pug');
  13. app.get('/redirect', (req, res) => {
  14. res.render('redirected-page');
  15. });
  16. app.get('/', (req, res) => {
  17. var urlQuery = url.parse(req.url, true).query;
  18. Promise.all([
  19. removeItem(urlQuery.itemToRemove),
  20. addItem(urlQuery.itemToAdd),
  21. ]).then(() => {
  22. res.redirect('redirect');
  23. });
  24. });
  25. app.use(function(err, req, res, next) {
  26. console.error(err.stack);
  27. res.status(500).send('Something broke!');
  28. });
  29. function removeItem(remove) {
  30. if (remove !== undefined) {
  31. MongoClient.connect(mongourl, function(err, db) {
  32. if (err) throw err;
  33. var dbo = db.db('mydb');
  34. var myquery = {
  35. itemName: remove,
  36. };
  37. dbo.collection('shoppingCart').deleteOne(myquery, function(err, obj) {
  38. if (err) throw err;
  39. console.log('deleted:' + myquery);
  40. db.close();
  41. });
  42. });
  43. }
  44. }
  45. function addItem(create) {
  46. if (create !== undefined) {
  47. MongoClient.connect(mongourl, function(err, db) {
  48. if (err) throw err;
  49. var dbo = db.db('mydb');
  50. var myobj = {
  51. itemName: create,
  52. };
  53. dbo.collection('shoppingCart').insertOne(myobj, function(err, res) {
  54. if (err) throw err;
  55. console.log('document inserted:' + myobj);
  56. db.close();
  57. });
  58. });
  59. }
  60. }
  61. app.listen(port, () => console.log(`Server is running at ${port}!`));
英文:

> TypeError: res.redirect is not a function

This is because res.redirect is an express function and you're using plain http node server.

You can consider using express for handling redirects for you.

  1. var http = require('http');
  2. var url = require('url');
  3. var MongoClient = require('mongodb').MongoClient;
  4. var mongourl = 'mongodb://localhost:27017/';
  5. // express
  6. const express = require('express');
  7. const app = express();
  8. const port = 8080;
  9. // for templating
  10. // create `views/` folder
  11. // and place `index.pug` and `redirected-page.pug`
  12. app.set('view engine', 'pug');
  13. app.get('/redirect', (req, res) => {
  14. res.render('redirected-page');
  15. });
  16. app.get('/', (req, res) => {
  17. var urlQuery = url.parse(req.url, true).query;
  18. Promise.all([
  19. removeItem(urlQuery.itemToRemove),
  20. addItem(urlQuery.itemToAdd),
  21. ]).then(() => {
  22. res.redirect('redirect');
  23. });
  24. });
  25. app.use(function(err, req, res, next) {
  26. console.error(err.stack);
  27. res.status(500).send('Something broke!');
  28. });
  29. function removeItem(remove) {
  30. if (remove !== undefined) {
  31. MongoClient.connect(mongourl, function(err, db) {
  32. if (err) throw err;
  33. var dbo = db.db('mydb');
  34. var myquery = {
  35. itemName: remove,
  36. };
  37. dbo.collection('shoppingCart').deleteOne(myquery, function(err, obj) {
  38. if (err) throw err;
  39. console.log('deleted:' + myquery);
  40. db.close();
  41. });
  42. });
  43. }
  44. }
  45. function addItem(create) {
  46. if (create !== undefined) {
  47. MongoClient.connect(mongourl, function(err, db) {
  48. if (err) throw err;
  49. var dbo = db.db('mydb');
  50. var myobj = {
  51. itemName: create,
  52. };
  53. dbo.collection('shoppingCart').insertOne(myobj, function(err, res) {
  54. if (err) throw err;
  55. console.log('document inserted:' + myobj);
  56. db.close();
  57. });
  58. });
  59. }
  60. }
  61. app.listen(port, () => console.log(`Server is running at ${port}!`));

huangapple
  • 本文由 发表于 2020年1月3日 14:33:01
  • 转载请务必保留本文链接:https://go.coder-hub.com/59574142.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定