【发布时间】:2017-01-22 01:37:57
【问题描述】:
我尝试使用路由构建一个简单的节点应用程序,但由于无法发布,它给出了 404 网络错误。有人可以指出我的错误并纠正吗?
首先我创建了一个目录 sampProj,然后在其中,我有一个文件 - appl.js 和一个目录 routes。在 routes 目录中,我有一个目录 routes 和一个文件 main.js。再次在 mainCode 目录中,我有 3 个文件 - main.js、server.js 和 index.html。
对于复杂的方向,我很抱歉,我想进行小规模测试,然后开始构建它。我想提一下,只有 server.js 和 index.html 的代码在没有路由的情况下工作,即 server.js 使用 app.post 和 app.get 等,而不是我在下面显示的相应路由器方法。
下面是应用程序的代码:
appl.js:
var express = require('express');
var bodyParser = require('body-parser');
var app = module.exports.app = express();
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false}));
// parse application/json
app.use(bodyParser.json());
// Adding routes
var server = require(__dirname + '/routes/main');
var mainCode = require(__dirname + '/routes/mainCode/main.js');
app.use('/Service', server);
app.use('/Service/mainCode', mainCode);
// Catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
/* Error Handlers */
// It will print the Stacktrace of error
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.send({
message: err.message,
error: err
});
});
}
app.listen(3000,function(){
console.log("Working on port 3000");
});
路由/main.js:
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
res.send('<code>Welcome to Service</code>');
});
module.exports = router;
mainCode/main.js:
var express = require('express');
var router = express.Router();
var server = require(__dirname + '/server');
router.use('/server', server);
module.exports = router;
mainCode/index.html
<html>
<head>
<title>Form Data</title>
</head>
<body>
<form id="uploadForm" enctype="multipart/form-data" action="/" method="post">
<input id = "userPhotos" type="file" name="userPhotos" multiple />
<input type='text' id='random' name='random'><br>
<input type="submit" value="Upload" name="submit">
</form>
</body>
</html>
mainCode/server.js:
var express = require("express");
var router = express.Router();
var multer = require('multer');
var storage = multer.diskStorage({
destination: function (req, file, callback) {
callback(null, './uploads/');
},
filename: function (req, file, callback) {
callback(null, file.fieldname + '-' + file.originalname);
}
});
var upload = multer({ storage : storage }).any();
router.get('/',function(req,res){
res.sendFile(__dirname + "/index.html");
});
router.post('/',function(req,res){
console.log("posted");
console.log("posted");
console.log(req.body);
upload(req,res,function(err) {
if(err) {
console.error(err);
return res.end("Error uploading file.");
}
console.log(req.body);
console.log(req.files);
res.end("File is uploaded");
});
});
module.exports = router;
在浏览器中打开 localhost:3000/Service/mainCode/server 后,会显示一个带有一个文本输入的表单,但如果我提交数据,它会重定向到 localhost:3000,并在屏幕上显示错误 404。
如果您对此投反对票,请告诉我您为什么这样做,以及我可以通过哪些方式改进问题。
【问题讨论】:
标签: javascript node.js forms express routes