我正在编写一个应用程序,并且试图找出为什么登录后的这种方式未注册。
如果有人对他们可以共享的路线有更好的模型或解决了问题,请回复
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('login'); 由于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();
我的应用程序正在为/ login编写404帖子,但是如果我将路由代码直接放在app.js中,它将起作用
如果这是我导出路线或处理路线或其他任何方式的问题,则我已经在网上进行了大量搜索以寻找解决方案,但找不到。建议和解决方案非常感谢!
答案 0 :(得分:0)
在第二个代码块中使用const router = express.Router();
创建的路由器永远不会挂接到任何东西。需要将其挂接到连接到http服务器的Express实例。
仅调用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
。非常令人困惑。