NodeJS 和 Express JS:尝试访问路由器时出现 404

时间:2021-06-07 17:31:54

标签: node.js forms express http-status-code-404

我正在处理一个需要上传文本的项目。但是由于某种原因,控制权没有转移到路由器上。另外,只有这个特定的路由器功能不起作用,路由器中的其他路由功能起作用

这是我的相关代码

这是收集数据的表格

    <div class="content ui segment" id="two">
        <form  method="POST" action = "/documents/uploadDoc">
          <h2>Name</h2>
          <br>
          <input class='button' type="text" id="myName" name="name">
          <input type="submit" name = "Submit">
        </form>
    </div>

documents.js 中的路由代码:

router.post("/uploadDoc",function(req,res,next){
  console.log("Uploading");
  res.redirect("/documents");
});

App.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var dbSetup = require('./db_setup');
var firebase = require('firebase');
var bucket = require('./firebase_storage');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var courseRouter = require('./routes/course');
var documentsRouter = require('./routes/documents');
var classroomRouter = require('./routes/classroom');
var apiRouter = require('./routes/api');

const e = require('express');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

// set user
app.use(function(req, res, next) {
  var user = firebase.auth().currentUser;
  res.locals.user = null;
  if(user) {
    var users = firebase.database().ref('/users');
    users.on('value', (snapshot) => {
      var data = snapshot.val();
      for(var rno in data) {
        var em = data[rno].email;
        if(em.localeCompare(user.email) == 0) {
          res.locals.user = data[rno];
        }
      }
    });
    res.locals.userEmail = user;
  }
  res.locals.url = process.env.FIREBASE_STORAGE_URL;
    next();
});

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/course', courseRouter);
app.use('/documents', documentsRouter);
app.use('/classroom', classroomRouter);
app.use('/api', apiRouter);





// 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.jade');
});



module.exports = app;

单击提交按钮时,我收到 404 错误,控制台中也没有打印“上传”。请帮忙

2 个答案:

答案 0 :(得分:0)

我重新启动了 VSCode,虽然它没有意义,但它以某种方式起作用了。如果您遇到同样的问题,建议您重新启动软件。

答案 1 :(得分:-1)

您的 nodejs 需要接受 multipart/form-data 来处理您的发布请求,或者您需要将您的文件转换为 base64 以将其作为 json 参数发送

这里是 multipart/form-data 的一个例子

您可以使用 multer 来实现这一点。

var multer  = require('multer')
var upload = multer({ dest: './public/data/uploads/' })
app.post('/stats', upload.single('uploaded_file'), function (req, res) {
   // req.file is the name of your file in the form above, here 'uploaded_file'
   // req.body will hold the text fields, if there were any 
   console.log(req.file, req.body)
});

不要忘记更改文件名以便上传。single('yourFileName') 例如:

<form action="/stats" enctype="multipart/form-data" method="post">
  <div class="form-group">
    <input type="file" class="form-control-file" name="uploaded_file">
    <input type="text" class="form-control" placeholder="Number of speakers" name="nspeakers">
    <input type="submit" value="Get me the stats!" class="btn btn-default">            
  </div>
</form>