强大的.解析方法不执行,nodejs和强大的包
formidable.parse method not executing, nodejs and formidable package
问题: .parse()方法从节点包'formidable'不想执行。
资源:这个网站上的代码片段是我用来参考的,如果有帮助的话:https://github.com/felixge/node-formidable
描述:我试图创建一个网站,可以上传和存储服务器端代码与nodejs文件。我使用httpdispatcher包来指导用户,使用强大的包来处理上传表单。
我遇到了一个问题,每次我的程序都按预期执行,直到强大的包方法parse(),然后停止做任何事情。浏览器选项卡试图重新加载,大约5分钟后显示了一个错误,"服务器没有发回任何内容"。我没有收到来自node的错误信息。
显然,这段代码只将处理过的表单数据发送回用户。我只是在我认为合理的范围内简化了它。
代码:nodejs (server.js文件):
var http = require('http');
console.log('http loaded');
var fs = require('fs');
console.log('fs loaded');
var dispatcher = require('httpdispatcher');
console.log('dispatcher loaded');
var formidable = require('formidable');
console.log('formidable loaded');
var util = require('util');
console.log('util loaded');
dispatcher.setStaticDirname('.');
dispatcher.setStatic('resources');
dispatcher.onGet('/main', function(request, response){
response.writeHead(200, {'Content-Type': 'text/html'});
fs.readFile('index.html', function(error, html){
response.end(html); //Callbacked to prevent async send of file read
})
});
dispatcher.onPost('/main', function(request, response){
console.log('upload url accessed');
processForm(request, response);
});
const PORT = 8000;
function processForm(request, response){
console.log('processForm launched');
var form = new formidable.IncomingForm();
console.log('formidable initailised');
form.parse(request, function(error, fields, files){
console.log('form parsing started');
response.writeHead(200, {'content-type': 'text/plain'});
console.log('head written');
response.write('data recieved:'n'n');
response.end(util.inspect({fields: fields, files: files}));
console.log('form passing ended');
});
}
function saveImage(){
console.log('saveImage called');
fs.readFile(request.files.uploadImage.path, function(error, imageData){
console.log('reading file');
path = './uploadedImages';
fs.writeFile(path, imageData, function(error){
console.log('fs encountered an error: %s', error);
});
});
console.log('saveImage ended');
}
function handleRequest(request, response){
console.log('request handler started');
console.log('request method: %s', request.method);
try{
console.log(`URL: %s was requested`, request.url);
dispatcher.dispatch(request, response);
}
catch(error){
console.log(`httpdispatcher encountered an error: %s`, error);
}
console.log('request handler ended');
}
var server = http.createServer(handleRequest);
server.listen(PORT, function(){
//Callback triggered when server is successfully listening.
console.log("Server listening on: http://localhost:%s", PORT);
});
代码:html文件(index . html):
<!DOCTYPE html>
<html>
<head></head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="uploadImage">
</form>
<form action="" enctype="multipart/form-data" method="post">
<fieldset>
<label for="imageTitle">Image title:</label>
<input type="text" id="imageTitle" name="imageTitle" placeholder="Enter title of image" />
<br />
<label for="imageDesription">Image desription:</label>
<textarea id="imageDesription" name="imageDesription" placeholder="Enter a description of the image"></textarea>
<br />
<input type="submit" value="Upload Image" />
</fieldset>
</form>
</body>
</html>
提前感谢。
看起来httpdispatcher修改了request
缓冲区,以至于无法从中提取表单值。
为了测试这一点,你可以直接在http模块的回调中处理post请求,而不调度请求:
function handleRequest(request, response){
console.log('request handler started');
console.log('request method: %s', request.method);
// HERE
if (request.method == 'POST') {
processForm(request, response);
return;
}
try{
console.log(`URL: %s was requested`, request.url);
dispatcher.dispatch(request, response);
}
catch(error){
console.log(`httpdispatcher encountered an error: %s`, error);
}
console.log('request handler ended');
}
我建议您使用express来分派基于方法和路由的请求。
相关文章:
- TypeError:在不兼容的接收器nodejs上调用了方法Uint8Array.length
- 将一个方法转换为promise:Nodejs
- NodeJS-从同一文件中的另一个方法调用一个方法
- NodeJS Express中的分页方法
- 在nodejs服务器上提供文件的更好方法,而不是if/else
- 需要一种方法来系统地处理NodeJS项目中的错误/异常/拒绝
- 在 nodejs 中有什么方法可以打印 JSON 格式的 log4js 输出
- Couchbase on Nodejs - add () 方法的工作原理
- NodeJS - 猫鼬,subdoc 对象没有方法 .id() 或 .create()
- NodeJS:使用不同文件夹的正确方法是什么?
- 在nodejs中使用Q.js承诺进行循环的正确方法
- 处理 nodejs 错误并提供不同自定义消息详细信息的最佳方法
- 带有构造函数和方法的 NodeJS 模块
- 使用 javascript/nodejs 创建动态方法
- 使用 nodejs & expressjs:在不模板的情况下将 .env 传递给 html 的好方法是什么?
- 在 NodeJS 中,有没有一种类似于 dependant 的方法:Ruby 中的 :d estroy 用于关联记录
- 在 NodeJS 中放置回调的语法和方法
- NodeJS 操作方法需要注入函数的模块
- NodeJS :如何有多种发布方法
- 平均值:上传的文件完全忽略req.on()NodeJS方法