我正在编写一个应用程序,我试图找出为什么这个登录的路由没有注册。
如果有人有更好的路由模型,他们可以共享或解决问题,请回复
import express from 'express';
const router = express.Router();
router.route('/login').post((req, res) => {
console.log('login');
let user = Users.getUser(req.body.email);
if (!user) {
console.log(`unable to find user: ${user}`);
res.status(401).send('Unable to find username');
return;
}
bcrypt.compare(req.body.pass, user.password, (err, goodComparison) => {
if (err) {
console.log(err);
res.status(401);
} else if (goodComparison) {
// Good password, generate key, send response
let key = Sessions.generateSession(user, token => {
let responseData = {
id: user.id,
username: user.username,
email: user.email,
admin: user.admin,
token: token
};
res.status(200).json(responseData);
});
// Invalid password
} else {
res.status(401);
}
});
});
export { router };
的console.log( '登录');由于404,从未被调用,路线未被提供。
import express from 'express';
const router = express.Router();
import { router as loginRouter } from './routes/login.route';
/**
* TODO:
* Possibly automate routes, or json import
*/
export default {
/** Initiate routers */
registerRoutes: function() {
console.log('registering routes');
console.log(loginRouter);
router.use('/login', loginRouter); /* HERE */
}
};
在我的app.js中(是的,它被正确导入)
// Register routes
// Register routes
Routes.registerRoutes();
我的应用程序是404 for / login的帖子,但是如果我将路由代码直接放在app.js中就可以了
如果这是我出口路线或处理路线或任何事情的方式的问题,我已经做了很多在线搜索解决方案并且无法找到它。非常感谢您的建议和解决方案!
使用const router = express.Router();
在第二个代码块中创建的路由器从不与任何东西挂钩。它需要挂钩到附加到http服务器的快速实例。
只是单独调用router.use(...)
不会对任何事情造成任何影响。该路由器必须连接到一个Express实例,该实例本身已连接到一个http服务器,该服务器已启动以便将传入的http请求发送到路由器。
此外,看起来你也试图为/login/login
而不仅仅是/login
创建一条路线。当你这样做:
router.use('/login', loginRouter);
这表示无论发送到router
的请求是什么,过滤掉请求,以便只有以/login
开头的请求才会被发送到loginRouter
。然后,在loginRouter
内,你有这个:
router.route('/login').post(...)
这表示对于来到router
的请求(实际上是前面代码中的loginRouter
),在已经匹配的任何内容上寻找/login
的额外路径。这意味着你会寻找/login/login
,这可能不是你发布的内容。
仅供参考,当您在不同文件中为同一路由器使用不同的符号名称时,您的代码将更加难以理解。如果您要在一个地方使用loginRouter
,那么对于该特定路由器,请在所有文件中使用相同的名称。您的代码将更容易混淆,并且不太可能让某人犯错误。你把它称为loginRouter
在一个地方,router
在另一个地方。然后,你有其他路由器,你也称为router
。很混乱。