Reids: ERR value is not an integer or out of range/ Express

// 打开页面时报错
url: http://127.0.0.1;3000/login
图片描述

// login 路由设置
图片描述

// login.js
图片描述

使用 redis 作为缓存数据库,为了练手

请教问题出在哪里,连页面也无法渲染?

阅读 7.6k
3 个回答

找到原因了,原因是显示主页时,用了一个中间件,设定了参数但是没有执行,等到其余的页面使用时,调用了刚才那个参数,因为参数类型而报错

来自2020年穿越5年的回答,哦,我的老伙计,这个题主写问题也太惜字如金了,我只有从别人评论的里才推测出题主当年在翻看《Node.js实战》这本书,因为5年后的今天我正在看这本五年前的“古籍”然后也毫无悬念的栽倒在这个坑上,我也不知道题主的解决办法,我说说我的解决办法吧。

第一步:不要参考书上的这个写法

// ./lib/middleware/page.js
var page = Math.max(
  parseInt(req.param('page') || '1', 10),
  1
) - 1;

req.param('page') 会是NaN这将直接导致报错,改成这个

// ./lib/middleware/page.js
var intPage = isNaN(parseInt(req.param("page", 10)))
 ? 1
 : parseInt(req.param("page", 10));
var page = Math.max(parseInt(intPage, 10), 1) - 1;

第二步,修改app.js中的路由顺序,将分页路由移动到其他路由的后面

// app.js
app.get('/register', register.form);
app.post('/register', register.submit);
app.get('/login', login.form);
app.post('/login', login.submit);
app.get('/logout', login.logout);
app.get('/post', entries.form);
app.post(
   '/post',
   validate.required('entry[title]'),
   validate.lengthAbove('entry[title]', 4),
   entries.submit
);
app.get('/api/user/:id', api.user);
app.post('/api/entry', entries.submit);
app.get('/api/entries/:page?', page(Entry.count), api.entries);
app.get('/:page?', page(Entry.count, 5), entries.list);

希望将来的某一天,如果有后人看这本书入门node.js时如果碰到了这个问题,能对你有所帮助。
以上。。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题