【问题标题】:cannot get profile page using method GET?无法使用 GET 方法获取个人资料页面?
【发布时间】:2020-05-17 16:32:15
【问题描述】:

我正在使用 Expressjs,我想在表单提交后在 URL 中显示用户输入,并将用户呈现到带有 URL 中名称的配置文件页面,所以我使用 req.query 和 GET 方法。 这是 app.js

var express = require('express');
var morgan = require('morgan');
var path = require('path');
var bodyParser = require('body-parser');

var port = process.env.port || 1001;

var app = express();

app.engine('.ejs', require('ejs').__express);
app.set('view engine', 'ejs');

app.set('views', path.join(__dirname, 'views'));

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.use(morgan('dev'));


app.get('/', (req, res) => res.render('user', { name: ''}));

app.put('/profile', function(req,res){
    var name = req.query.name;
    res.render('profile/'+ name , { name: name });
});

app.post('/', function(req, res){
    var name = req.query.name;
    res.render('profile/:name' , { name: name});    
});


app.listen(port, function(err){ if(err) throw err; console.log('Server running On Port : ' + port)});

这是表单 user.js

<form action="/profile/<%= name %>" method="GET">
    <input type="text" name="name">
    <button><a>Add</a></button>
</form>

这是个人资料页面。

<h1>Hello <%= name %></h1>
<button><a href="/">Home</a></button>

【问题讨论】:

  • 我已经更新了我的答案,如果你仍然想在 url 中显示用户输入:所以 url 看起来像这样:localhost:1001/profile/user-input-name
  • 我再次更新了我的答案,然后你有 2 个选项,你需要你的 url 看起来像这样:localhost:1001/profile/user-input-name 或像这样:localhost:1001/profile/?name=user-input-name。这个选择是你的

标签: javascript node.js express url query-string


【解决方案1】:

?‍?也许你可以试试下面的代码:?

App.js

var express = require('express');
var morgan = require('morgan');
var path = require('path');
var bodyParser = require('body-parser');

var port = process.env.port || 3000;

var app = express();

app.engine('.ejs', require('ejs').__express);
app.set('view engine', 'ejs');

app.set('views', path.join(__dirname, 'views'));

app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.use(morgan('dev'));

app.get('/', (req, res) => res.render('user', { name: ''}));

app.post('/profile', function(req,res){
    var { name } = req.body;
    res.render('profile', { name });
});

app.listen(port, function(err){ if(err) throw err; console.log('Server running On Port : ' + port)});

?‍? 现在您的user.ejs 将如下所示:?

user.ejs

<form action="/profile/<%= name %>" method="POST">
  <input type="text" name="name">
  <button><a>Add</a></button>
</form>

如果您希望您的 url 看起来像这样:http://localhost:1001/profile?name=yourname,那么您只需在 App.jsuser.ejs 表单方法上将方法 POST 更改为 GET

? 更新:如果您希望您的 url 看起来像这样:http://localhost:1001/profile/yourname,那么您可以使用以下代码更改您的 /profile 路由:

app.get('/profile', function(req,res){
  const { name } = req.query;
  res.redirect('/profile/' + name.replace(/ /g, '-') );
});

app.get('/profile/:name', (req, res) => {
  const { name } = req.params;
  res.render('profile', { name : name.replace(/-/g, ' ') });
})

?如果您使用上述路线,确保,在您的 user.ejs 中仍然使用 GET 方法。

希望对你有帮助?。

【讨论】:

  • 我知道 req.body 有效,但我想在 URL 中显示用户名,例如 name=Jay !这就是我使用 req.query 和 GET 方法的原因,你知道如何在 URL 中显示用户名吗?
  • 您只需在您的app.js 和您的form 方法中将方法POST 更改为GET
  • 这个代码对我有用,伙计,非常感谢,我不知道它是如何工作的,但它真的很有帮助
  • 不客气。也感谢您的支持和正确答案徽章。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
  • 1970-01-01
  • 2017-09-01
  • 1970-01-01
  • 2013-07-08
  • 1970-01-01
相关资源
最近更新 更多