我正在尝试制作基于讨论的Node.js / Express-app,并且我正在页面上创建讨论。我只是测试我的讨论控制器文件是否已链接,但每次我点击按钮发布我的表单时,它都没有做任何事情。
我的哈巴狗(视图),名为' createDisc.pug'
extends layout
block content
h1 Create new discussion
form(action='', method='post')
div
label(for='title') Title
input#title
div
label(for='desc') Description
input#desc
div
input(type='submit', value='Create')
我的路由器,名为' createDisc.js'
var express = require('express');
var router = express.Router();
var disc = require('../controllers/disc');
router.get('/discussion/create', function (req, res, next) {
res.render('createDisc');
});
router.post('/discussion/create', disc.createDisc);
module.exports = router;
我的控制器名为' disc.js'我只想尝试发送' test'到我的控制台
exports.createDisc = function (req, res, next) {
console.log('test');
};
我的app.js文件
const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const passport = require('passport');
const path = require('path');
const cookieParser = require('cookie-parser');
const session = require('express-session');
const app = express();
const db = require('./controllers/db');
require('./config/passport')(passport);
mongoose.connect(db.url);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, 'public')));
app.use(bodyParser.urlencoded({extended: true}));
app.use(cookieParser());
app.use('/', require('./routes/createDisc'));
app.listen(3000, function() {
console.log('Example listening on port 3000!')
})
答案 0 :(得分:1)
您提到/discussion/create
作为GET
路由并将其链接到快速路由器,如:
router.get('/discussion/create', function (req, res, next) { res.render('createDisc'); }); router.route('/discussion/create', disc.createDisc);
所以实际上,你正在启用这样的路线:
GET /discussion/create/discussion/create
请尝试使用.post()
挂钩并使用它:
router.post('/', function (req, res, next) {
res.render('createDisc');
});
router.route('/discussion', disc.createDisc);
参考: http://expressjs.com/en/guide/routing.html
提示:请参阅此链接以制作更有意义的路线。 https://github.com/squareboat/api-guidelines#http-methods
目前,在您的HTML(pug)表单中,您有action=''
,这表示您的表单正在向POST /
发出请求。
请将操作值更改为action='/discussion/create'
,然后重试。
我已经制作了一个精简版的代码(没有视图或数据库),而且它运行得很好。你可以看到代码here。
要测试的路线是:
GET http://localhost:3000/discussion/create
POST http://localhost:3000/discussion/create
在你的pug文件中,你的缩进是错误的,因为输入字段没有包含在form标签内。你有一个空的表格。
extends layout
block content
h1 Create new discussion
form(action='/discussion/create', method='post')
div
label(for='title') Title
input#title
div
label(for='desc') Description
input#desc
div
input(type='submit', value='Create')
这样可行。
答案 1 :(得分:0)
尝试将表单修改为:
form(method='post', action='./create')
看看它是否有效