我正在处理一个需要上传文本的项目。但是由于某种原因,控制权没有转移到路由器上。另外,只有这个特定的路由器功能不起作用,路由器中的其他路由功能起作用
这是我的相关代码
这是收集数据的表格
<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 错误,控制台中也没有打印“上传”。请帮忙
答案 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>