【问题标题】:cannot POST / Nodejs无法发布/Nodejs
【发布时间】:2021-03-11 14:04:08
【问题描述】:

请帮我解决我长期以来一直在努力解决的错误。因此,我也无法将数据添加到我的数据库中。 任何帮助将不胜感激。

这是我的 index.js 代码

const express = require('express');
const app = express();
const routes = require('./routes');
const path = require('path');

const fileUpload = require('express-fileupload');
const bodyParser = require('body-parser');

const session = require('express-session');
const auth = require('./routes/auth');
const {
  con,
  sessionStore
} = require('./config/db');
const fs = require('fs');

require('dotenv').config({
  path: path.join(__dirname, '.env')
});
const port = process.env.PORT || 3000;


// parse application/json
app.use(bodyParser.json())
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({
  extended: false
}));


//static files 
app.use(express.static('public'))
app.use('/css' , express.static(__dirname + 'public/css'))
app.use('/imgs' , express.static(__dirname + 'public/imgs'))

var sess = {
    secret: 'keyboard cat',
    store: sessionStore,
    cookie: {
      httpOnly: false,
    },
    resave: false,
    saveUninitialized: false
  }
  
  app.use(session(sess));
  app.use(fileUpload());
//set views
app.set('view engine' , 'ejs');
app.set('views', path.join(__dirname, 'views'));


app.use(require('connect-flash')());
app.use((req, res, next) => {
  res.locals.messages = require('express-messages')(req, res);
  next();
});
app.get('/', (req,res) =>{
    res.render('index22')
})
app.get('/login', (req, res) => {
    res.render('login');
   });

   let s;

const loginRequired = (req, res, next) => {
    if (req.session.username) {
    s = req.session;
    next();
    } else {
    res.redirect('/auth/login');
    }
}

 
app.get('/new', loginRequired, routes.new);//call for main index page
app.post('/new', loginRequired, routes.new);//call for signup post 
app.get('/show/:username', loginRequired, routes.show);
app.use('/auth', auth);
app.listen(port, () => console.log(`listening on http://${process.env.HOST}:${port}`));

这是我的 routes.js 代码

const {
   con,
   sessionStore
 } = require('./config/db');
exports.new = function(req, res){
    message = '';
   if(req.method == "POST"){
      const post  = req.body;
      const username= post.username;
      const title= post.title;
      const state= post.state;
      const category= post.category;
      const description= post.description;
 
      if (!req.files)
                return res.status(400).send('No files were uploaded.');
 
        const file = req.files.uploads;
        const img_name=file.name;
 
         if(file.mimetype == "images/jpeg" ||file.mimetype == "images/png"||file.mimetype == "images/gif" ){
                                 
              file.mv('public/imgs/uploads/'+file.name, function(err) {
                             
                  if (err)
 
                    return res.status(500).send(err);
                        const sql = "INSERT INTO `nt_data`(`username`,`title`,`state`,`category`, `images` ,`description`) VALUES ('" + username + "','" + title + "','" + state + "','" + category + "','" + img_name + "','" + description + "')";
 
                            const query = con.query(sql, function(err, result) {
                                 res.redirect('show/'+result.insertUsername);
                            });
                       });
          } else {
            message = "This format is not allowed , please upload file with '.png','.gif','.jpg'";
            res.render('new.ejs',{message: message});
          }
   } else {
      res.render('new');
   }
 
};

exports.show = function(req, res){
    let message = '';
    const username = req.params.username;
    const sql="SELECT * FROM `nt_data` WHERE `username`='"+username+"'"; 
    con.query(sql, function(err, result){
      if(result.length <= 0)
      message = "show not found!";
      
      res.render('show.ejs',{data:result, message: message});
   });
};

这是我的 new.ejs 代码的一部分

<body>
      <h1 class="mt-5" id="h1">New Post</h1>
      <hr class="w-50">
    
      <div class="container mt-3">
      <form action="/" method="POST" class="was-validated" enctype="multipart/form-data">
        <% if (message.length > 0) { %>
          <div class="alert alert-success col-sm-12"><%= message %></div>
      <% } %>
        <div class="row">
        <div class="col-6">
        <select name="state" class="custom-select mb-3">
          <option>Select Sate</option>
          <option value="Sikkim">Sikkim</option>
          <option value="Manipur">Manipur</option>
          <option value="Mizoram">Mizoram</option>
        </select>
        </div>

请帮我解决这个非常重要的错误。 谢谢

【问题讨论】:

  • 您不处理 / 的 POST 请求。您的意思是向/new 发帖吗?

标签: javascript mysql node.js express ejs


【解决方案1】:

您的 index.js 文件不包含路由 "/" 的 POST 方法。您可以使用以下示例添加一个:

app.post('/',function(req,res){
  //Your function code
});

【讨论】:

  • 您的建议解决了这个问题,但我现在仍然无法将数据添加到我的数据库中,即使以我创建的表单上传 jpg 文件时说这种文件格式是不允许的。我不知道为什么会这样。如果您能为此提出建议,那就太好了。
  • 您检查的mimetype 应该是“image/jpeg”或“image/png”。不是“images/jpeg”或“images/png”
  • 现在显示无法读取未定义的属性“插入用户名”
  • 您的查询的result 变量存在问题
  • 您能提出具体的问题吗?
猜你喜欢
  • 1970-01-01
  • 2020-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 1970-01-01
  • 2021-06-08
  • 2022-01-27
相关资源
最近更新 更多