为啥nodejs express服务器在我使用post时返回302?
Posted
技术标签:
【中文标题】为啥nodejs express服务器在我使用post时返回302?【英文标题】:why nodejs express server return 302 when i use post?为什么nodejs express服务器在我使用post时返回302? 【发布时间】:2019-08-27 15:44:22 【问题描述】:我正在创建一个注册和登录系统。我在 GET 请求中获得了一个表单 html 页面,它工作正常,但是当我使用 post 发布我的数据时,服务器在 chrome 检查中返回 302,并且请求类型是 xhr,因为我没有说重定向或任何告诉浏览器的代码去做。我真的需要帮助。
这是服务器文件
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var signupRouter = require('./routes/signup.js');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded( extended: true ));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/signup', signupRouter);
// catch 404 and forward to error handler
app.use(function(req, res, next)
next(createError(404));
);
// error handler
app.use(function(err, req, res, next)
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : ;
// render the error page
res.status(err.status || 500);
res.render('error');
);
app.listen(3000, "localhost", function()
console.log("server started listening on port 3000");
);
module.exports = app;
这是路由器文件
var router = express.Router();
/* GET home page. */
router.get('/', function(req, res, next)
console.log('11212112');
res.render('signup', title: 'signup section' );
);
router.post('create', function(req, res, next)
console.log('fefffefefef');
res.statusCode = 200;
res.send('lfffff');
);
module.exports = router;
这是浏览器上的javascript
$.post("http://localhost:3000/signup/create",
name: "Donald Duck",
city: "Duckburg"
,
function (data, status)
alert("Data: " + data + "\nStatus: " + status);
);
注意
警报未出现在 post 回调中,我在 chrome 检查时只看到 302
更新
这是邮递员测试网址的图片
【问题讨论】:
createError
是什么?
你只是给我指出了一个我不知道的函数,我把这个脚本从构建一个 node express 教程中作为一个初学者,你认为这是问题吗?我所知道的评论是它可能使用自定义 html 页面处理 404 错误
创建错误是一个处理 404 的函数,参见我使用的脚本中的第一行 var createerror
【参考方案1】:
这是由于需要在路由文件的路由器声明中启用mergeParams
const router = express.Router( mergeParams: true );
https://expressjs.com/en/api.html#express.router
mergeParams -- 保留来自父路由器的 req.params 值。 如果父母和孩子有冲突的参数名称,孩子的 值优先。
我创建的通用 todo 存储库的示例实现:https://github.com/jongear/async-api-example-js/blob/master/src/routes/todoRoutes.js#L4
【讨论】:
【参考方案2】:请更改您的发帖路线,如下所示:
router.post('/create', function(req, res, next)
console.log('fefffefefef');
res.statusCode = 200;
res.send('lfffff');
);
你错过了一个斜线。
斜线 '/' 很重要,因为您的 BASEURL 是 http://localhost:3000
而不是 http://localhost:3000/
【讨论】:
还是一样。 奇怪的是控制台函数没有打印任何东西,这可能告诉我该函数根本没有被调用,因为响应代码不同并且控制台没有打印 你尝试过邮递员的网址吗?返回 res.json('something');检查? 302 发现返回 .. 用图片检查我更新的问题 能否将get list route移到create route下方查看一下?以上是关于为啥nodejs express服务器在我使用post时返回302?的主要内容,如果未能解决你的问题,请参考以下文章
为啥nodejs express post请求中的“body”为空?
为啥我无法从任何网络连接到 NodeJS express 服务器?
NodeJS,Express,我为啥要使用 app.enable('trust proxy');
如果我可以只用 nodejs 本身做所有事情,我为啥要使用 Express? [关闭]