节点connect-flash不适用于表单提交

时间:2019-05-10 10:22:56

标签: javascript jquery node.js

我在Node中的connect-flash有问题。我想在提交表单时显示成功消息而无需刷新页面。我的应用程序如下所示:

  1. 我有一个Jquery数据表,显示页面中的雇员列表。
  2. 在同一页上的数据表下方,我有一个添加新员工的表单。 3.添加新员工后,我想使用connect-flash显示成功消息。

请,你能告诉我我在哪里做错了吗?添加新员工后未显示成功消息...

我的代码如下:

employeeList.js控制器代码:

var express = require('express');
var session = require('express-session');
var router = express.Router();
var bodyParser = require('body-parser');
const database = require('../services/database.js');
var flash = require('connect-flash');
router.use(session());
router.use(flash());

// Creates a new employee profile
async function post(req, res, next) {
    let error = null, result = null;
    try {
        let binds = {};
        console.log("Content-Type ="+req.get('Content-Type'));
        if (req.get('Content-Type').indexOf("application/json") < 0) {
            console.log("In the Post if");
            res.set('Content-Type', 'application/json').status(415).send(JSON.stringify({
                status: 415,
                message: "Wrong content-type. Only application/json is supported",
                detailed_message: null
            }));
            return;
        } else {
            binds.FIRST_NAME = req.body.FIRST_NAME;
            binds.LAST_NAME = req.body.LAST_NAME;
            binds.EMAIL = req.body.EMAIL;
            binds.PHONE_NUMBER = req.body.PHONE_NUMBER;
            binds.HIRE_DATE = req.body.HIRE_DATE;
            binds.JOB_ID = req.body.JOB_ID;
            binds.SALARY = parseFloat(req.body.SALARY);
            binds.COMMISSION = parseFloat(req.body.COMMISSION);
            binds.MANAGER_ID = parseInt(req.body.MANAGER_ID);
            const maxEmpId = await database.simpleExecute("SELECT MAX(EMPLOYEE_ID)+1 as maxEmpId FROM employees", {}, {});
            console.log("MaxEmpId "+JSON.stringify(maxEmpId.rows[0]["MAXEMPID"]));
            binds.EMPLOYEE_ID = JSON.stringify(maxEmpId.rows[0]["MAXEMPID"]);
            console.log("Binds ="+JSON.stringify(binds));
        }
        result = await database.simpleExecute("INSERT INTO employees VALUES " +
        "(:EMPLOYEE_ID, :FIRST_NAME, :LAST_NAME, :EMAIL, :PHONE_NUMBER, " +
        ":HIRE_DATE, :JOB_ID, :SALARY, :COMMISSION, :MANAGER_ID, 60) ", binds, {});
    } catch (err) {
        error = err;
        console.log("Error ===="+err);
        next(err);
    } finally {
        if (error != null || result.rowsAffected === 0) {
            // Error
            console.log("Error ="+error);
            res.set('Content-Type', 'application/json');
            res.status(400).send(JSON.stringify({
                status: 400,
                message: (error != null && error.message.indexOf("ORA-00001") > -1) ? "Employee already exists" : "Input Error",
                detailed_message: (error != null ? error.message : "")
            }));

        } else {
            // Successfully created the resource
            console.log("Error ="+error+", Result ="+result);
            req.flash('success', 'Employee Added Successfuly');
            res.status(201).send(JSON.stringify({status: 201, message: "", detailed_message: ""}));
        }
    }
};

module.exports.post = post;


**// Read all the employee_profiles (GET)**
async function get(req, res, next) {
    try {
        console.log("In the GET of Route");
        const result = await database.simpleExecute("SELECT * FROM EMPLOYEES", [], {});
        const rows = JSON.stringify(result.rows);
        // console.log("Rows ="+rows);
        res.json(rows);
    } catch (err) {
      console.log("Error ===="+err);
      next(err);
    }
};

module.exports.get = get;

employeeRouter.js代码:

var express = require('express');
var session = require('express-session');
var router = express.Router();
var bodyParser = require('body-parser');
const employeesList = require('../controllers/employeesList');
const employee = require('../controllers/showEmployee');
var flash = require('connect-flash');
router.use(session());
router.use(flash());

router.route('/employees').get(function(req, res, next) {
    try {
        res.render("index", { messages: req.flash('success') });
        console.log('FLASH MESSAGES-->',req.flash());
    } catch (err) {
      console.log("Error ===="+err);
      next(err);
    }
});

app.js代码:

var createError = require('http-errors');
var express = require('express');
var session = require('express-session');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var flash = require('connect-flash');

// Database
var indexRouter = require('./routes/index');
var employeesRouter = require('./routes/employeesRouter');
var app = express();
app.use(flash());

// view engine setup
app.set('view engine', 'pug');
app.set('views', path.join(__dirname, 'views'));
app.use(express.static(path.join(__dirname, '/')));
app.use(express.static(path.join(__dirname, 'public')));

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

//Setup Session MiddleWare with secret and session options
var sessionMiddleware = session({
    secret: 'keyboard cat',
    resave: true,
    saveUninitialized: true
  });

app.use(sessionMiddleware);
app.use(function (req, res, next) {
    //req.session.test = "test";
    req.flash('info', req.flash());
    next();
});

app.use('/', employeesRouter);
// 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');
});

module.exports = app;

索引帕格文件:

我有条件显示这样的消息

//Message
        #testing
            if (messages.length>0)
            div.alert.alert-danger #{ messages }

1 个答案:

答案 0 :(得分:0)

根据Chris G的建议,我向JSON添加了一条响应消息,该消息已发回并使用我的哈巴狗模板中的Jquery呈现。