Узел проблем с перенаправлением страницы-js

#mysql #node.js #express #ejs

#mysql #node.js #выражать #ejs

Вопрос:

Я пытаюсь открыть файл places.ejs, нажав кнопку отправки на show.js страница, аналогично странице show.ejs, открывается при нажатии кнопки отправки в новом файле.ejs, но возникает ошибка ссылки. Пожалуйста, помогите мне исправить ошибку. Я прилагаю к настоящему мой routes.js код и часть моего index.js код Любая помощь была бы весьма признательна. Спасибо

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.uploaded_image;
      var img_name=file.name;
 
         if(file.mimetype == "image/jpeg" ||file.mimetype == "image/png"||file.mimetype == "image/gif" ){
                                 
              file.mv('public/imgs/uploads/' file.name, function(err) {
                             
               var sql = "INSERT INTO `nt_data`(`username`,`title`,`state`,`category`, `images` ,`description`) VALUES (?,?,?,?,?,?)";
               var query = con.query(sql, [username, title, state, category, img_name, description], function(err) {
                  console.log(err)
                 if (!err) {
                   res.redirect('show/'   category);
                 }
                 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 = '';
  
   var category = req.params.category;
    const sql="SELECT * FROM `nt_data` WHERE `category`='" category "'"; 
    con.query(sql, function(err, result){
      console.log(err)
     if(result.length <= 0){
     
      message = "show not found!";
      
      res.render('show.ejs',{data:result, message: message});
     }
     else{
      res.redirect('places/'  username);
    }
   });
};
exports.places = function(req, res){
    let message = '';
  
   var username = req.params.username;
   const sql="SELECT * FROM `nt_data` WHERE `username`='" username "'"; 
    con.query(sql, function(err, result){
      
     if(result.length <= 0)
     
      message = "places not found!";
      
      res.render('places.ejs',{data:result, message: message});
   });
};
 

часть index.js код

 app.get('/new', loginRequired, routes.new);//call for main index page
app.post('/', loginRequired, routes.new);//call for signup post 


app.get('/show/:category', loginRequired, routes.show);
app.post('/', loginRequired, routes.show);
app.get('/places/:username', loginRequired, routes.show);
 

ошибка

 ReferenceError: username is not defined
    at Query.<anonymous> (C:UsershpDesktopInternshipNtroutes.js:62:31)
 

Ответ №1:

Я думаю, проблема в следующем: вы определили имя пользователя в exports.new. Но при загрузке exports.places имя пользователя будет неопределенным. Итак, я предлагаю следующее: передайте ему имя пользователя, чтобы показать вот так, /show/:username/:category вызовите этот маршрут из export.new следующим образом: res.redirect('show/' username '/' category) затем из exports.показывать места вызовов с res.redirect('places/' req.params.username);

Дайте мне знать, если это поможет!

Комментарии:

1. он показывает ошибку ссылки как для данных, так и для имени пользователя следующим образом: имя пользователя не определено, а данные не определены

2. Можете ли вы добавить еще немного отладки и опубликовать результаты? Например console.log(req) , и console.log(req.body) . Ошибка возникает в местах, var username = req.params.username; функционирующих правильно? Можете ли вы напечатать имя пользователя раньше res.redirect('places/' username); в консоли и опубликовать его здесь?

Ответ №2:

Пожалуйста, какое значение имеет переменное имя пользователя. Я вижу, что вы не присвоили ему никакого значения.

  • Создайте переменное имя пользователя и присвоите ему имя пользователя, полученное из базы данных.

Однако я изменил путь перенаправления.

 exports.show = function(req, res){
    let message = '';
  
   var category = req.params.category;
    const sql="SELECT * FROM `nt_data` WHERE `category`='" category "'"; 
    con.query(sql, function(err, result){
      console.log(err)
     if(result.length <= 0){
     
      message = "show not found!";
      
      res.render('show.ejs',{data:result, message: message});
     }
     else{
      // Take a look;
      const username = #sql.username or anyhow you point to a field 
      res.redirect('/places/'  username);
    }
   });
};

Try that
 

Комментарии:

1. На самом деле новый файл.ejs является формой, поэтому любые пользовательские файлы в разделе username формы будут приняты за его значение.