如果单击链接时视图不存在,则无法执行操作

时间:2014-08-18 13:46:43

标签: node.js express pug

我目前正在建立一个非常简单的网站。它具有以下结构:

/

-routes

- index.js

- login.js

- logout.js

-views

- index.jade

- login.jade

该网站使用最新版本的node.js,使用玉石模板引擎并表达,如果这也有帮助。

基本上我有它,当你点击索引时,你会看到登录选项,它将处理登录模板,并检查你的凭据。使用注销,我希望它只是转到.js文件,核对我拥有的会话,并重新路由到索引视图。然而,我似乎无法正确地完成路由,它的行为就像它期待一个视图,但由于没有,我认为这就是它失败的原因。有没有办法说“没有视图,jsut处理js文件?”

编辑:app.js文件内容

var express = require('express');
var path = require('path');
var favicon = require('static-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var http = require('http');

var indexRoute = require('./routes/index');
var loginRoute = require('./routes/login');
var logoutRoute = require('./routes/logout');

var app = express();

var db = require("mongojs").connect("localhost:27017/acl", ["comments"]);

app.use(function(req,res,next){
req.db = db;
next();
});

// view engine setup
app.set('port', process.env.PORT || 3000);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(favicon());
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use(cookieParser());
app.use(require('stylus').middleware(path.join(__dirname, 'public')));

app.use(express.static(path.join(__dirname, 'public')));
app.get('*', function(req, res, next) {
res.locals.user = req.user || null;
next();
});

app.use('/', indexRoute);
app.post('/loginForm', loginRoute);
app.use('/login', loginRoute);
app.use('/logout', logoutRoute);

logout.js

var express = require('express);
var router = express.Router();

router.get('/logout', function (req, res) {
   if (req.session === undefined) {
      res.location("index");
      res.redirect("/");
   } else {
      if (res.session.role == "guest") {
         res.location("index");
         res.redirect("/");
      } else {
         req.session = null;
         res.render('home', {title: "express" });       
      }
   }
}

module.exports = router;

1 个答案:

答案 0 :(得分:1)

您的错误似乎在这里:

...
} else {
    req.session = null;
    res.render('home', {title: "express" });       
}
...

我相信你只想做与if语句的其他部分完全相同的事情 - 重定向到索引。

另一方面,

res.location("index");
res.redirect("/");

可以并且很可能应该更改为

res.redirect("/")

logout.js的第一行似乎还有拼写错误 - 您错过了require('express')

的最终报价