未定义的HTTP GET请求被Node.js服务器解释
Undefined HTTP GET Request Interpreted by Node.js Server
我有一个问题与我的Node.js应用程序,我通过ajax调用客户端发送http get请求,然后我接收请求服务器端,并试图使用通过get请求发送的数据。我的问题是服务器说请求是未定义的。我完全不知道为什么会出现这种情况,因为我在其他页面上做其他类似的请求,它们工作得很好。
下面是我的错误信息:
/var/www/html/AdminExtension/extension/extension/node_modules/find/index.js:35
throw err;
^
Error: ENOENT, lstat '/path/to/project/undefined'
"未定义"位应该是从请求中检索到的路径的其余部分。
这是我相关的app.js代码:
var express = require('express');
var MemoryStore = require('connect').session.MemoryStore;
var app = express();
app.set('port', process.env.PORT || 3333);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.set('view options', {layout: false});
app.use(require('morgan')('dev'));
app.use(require('body-parser')({ keepExtensions: true}));
app.use(require('cookie-parser')());
app.use(require('express-session')({ secret: '12345678910', store: new MemoryStore({ reapInterval: 600000}) }));
app.use(require('method-override')());
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
next();
});
app.use(express.static(path.join(__dirname, '/public')));
app.all('*', function (req, res, next) {
res.header("Access-Control-Allow-Origin", "*");
res.header('Access-Control-Allow-Methods', 'GET');
next();
});
// Routes for browsing directories and listing contents
var browse = require('./routes/general/browse');
app.get('/browse/file/info', browse.getFileInformation);
app.listen(app.get("port"));
服务器端browser .js代码:
var path = require('path');
var fs = require('fs');
exports.getFileInformation = function(request, response) {
var filePath = "/folder1/folder2/" + request.body.filePath;
console.log('*' + filePath + '*');
checkFileInfo(
filePath,
function(err, fileInfo) {
if (err)
console
.log("An error has occured when trying to retrieve the file information: "
+ err);
else
response.send(fileInfo);
});
};
function checkFileInfo(filePath, callback) {
fs
.lstat(
filePath,
function(err, stats) {
if (err)
return callback(err);
else if (stats && stats.isFile()) {
var fileInfo = {};
fileInfo.size = stats.size;
fileInfo.created = stats.ctime;
fileInfo.modified = stats.mtime;
fileInfo.accessed = stats.atime;
callback(null, fileInfo);
} else
return callback("The path provided did not lead to an accessible file.");
});
}
和客户端ajax请求:
var obj = {
filePath : "/relative/path/this_is_a_file.txt"
};
$.ajax({
type : "GET",
url : serverUrl + '/browse/file/info',
data : obj,
dataType : 'json',
success : function(fileData) {
// Do something else
}
});
问题可能是在您的checkData
功能:
function checkData(data) {
console.log(JSON.stringify(request.body));
return data;
}
它只接收数据并且你使用request
对象——它在它的上下文中是不可访问的。
您可以添加另一个名为request
的参数到该函数:
function checkData(data, request) {
console.log(JSON.stringify(request.body));
return data;
}
并发送请求对象:
checkData(request.body.filePath, request)
更新问题后,原来的问题又出现了。
我猜你在那里得到的未定义的问题是因为你正在访问请求体-如果它是POST
请求(GET
请求只有一个url和标题),请求有一个带有参数的体。
尝试将客户端ajax调用从type : "GET"
更改为type : "POST"
并更新您的nodejs:
app.get('/browse/file/info', browse.getFileInformation);
app.post('/browse/file/info', browse.getFileInformation);
我还建议使用__dirname + '/path'
获取文件路径,以避免出现问题。
事实证明,我需要使用
request.query.filePath
代替
request.body.filePath
相关文章:
- Node.js v6.2.0类扩展不是函数错误
- 如何使用 node.js 比较两个 json 数组
- Node.js's Buffer.writeFloatBE in Javascript
- node.js:setInterval()正在跳过调用
- 如何处理node.js节点mongodb中的连接和查询队列
- Node.js正在更改应用程序以使用集群模块
- 如何使用Node.js最有效地解析网页
- 在openshift node js应用程序中获取请求
- 正在删除node.js中已验证的网站
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 在索引.html和应用.js [node.js] 之间共享变量
- Node.js中的JavaScript原型对象效率
- node.js请求数据事件未在CORS ajax调用中触发
- 使用node.js制作网站
- 使用node.js服务器中的evernote api获取note内容
- 有没有任何方法可以使用node-js从不同的机器打开浏览器
- 使用CI和CodeDeploy对node.js应用程序进行连续部署
- 在Node.js中上传和检索图像
- 什么's本地node.js服务器和python简单http服务器之间的区别
- 如何使用 Node JS 获取 JSON 嵌套数组值