Nodejs express 表单内容传出
Nodejs express 表单内容传出
1.我在routes/index.js中添加了提取表单内容
exports.doSearch = function(req, res){
//console.log(req.params.doSearch);//输出index
var namevalue = req.body.username;
console.log(namevalue);//输出表单post提交的login_name
res.send(‘great you are right for post method:’ + namevalue);//显示页面文字信息
return namevalue;
};
2.我在另外一个文件search.js文件中想引用index.js中的namevalue值
var searchResult = require(’./routes/index’);
var myname = searchResult.doSearch();
发现报错:
C:\project\ex03\routes\index.js:21
var namevalue = req.body.username;
^
TypeError: Cannot read property ‘body’ of undefined
at Object.exports.doSearch (C:\project\ex03\routes\index.js:21:21)
at Object.<anonymous> (C:\project\ex03\search.js:8:28)
at Module._compile (module.js:456:26)
at Object.Module._extensions…js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
at node.js:906:3
3.请问我怎样才能将namevalue传出来?
你REQ没丢进去。req在INDEX.JS里面就是UD
亲,缺少参数,前面导出的方法带有req,res,而你的body属性是req的,这里引用的时候不带参数当然就是找不到body from undefined
首先像一楼说的 要var myname = serarchResult.doSearch(req, res) 试了还不行要看是不是出错了报什么错, 你可以在search.js中输出req 看下里面的req,body的信息是否有username
在Express应用中,req
对象代表HTTP请求,并包含客户端请求的数据。当你尝试从 search.js
文件直接调用 doSearch
函数时,Express框架不会自动填充 req
参数,因此你会遇到 TypeError: Cannot read property 'body' of undefined
错误。
解决方案
你可以通过修改 doSearch
方法使其返回一个Promise,然后使用中间件来处理HTTP请求和响应。以下是解决方案:
routes/index.js 修改后的内容
const express = require('express');
const router = express.Router();
router.post('/search', function(req, res) {
console.log(req.params.doSearch); // 输出index
var namevalue = req.body.username;
console.log(namevalue); // 输出表单post提交的login_name
res.send(`great you are right for post method: ${namevalue}`); // 显示页面文字信息
});
exports.router = router;
暴露路由到其他文件
在 app.js
或其他入口文件中设置路由:
const express = require('express');
const app = express();
const indexRouter = require('./routes/index');
app.use(express.urlencoded({ extended: true })); // 支持解析 URL 编码的表单数据
app.use('/search', indexRouter);
// 其他中间件和路由
search.js 示例
为了验证结果或测试目的,你可以创建一个简单的Express服务器:
const express = require('express');
const app = express();
app.use(express.json()); // 如果你使用的是JSON格式的数据
app.use(express.urlencoded({ extended: true })); // 如果你使用的是表单数据
// 你可以在这里添加一个简单的POST请求来测试功能
app.post('/test-search', (req, res) => {
const namevalue = req.body.username;
console.log('Received namevalue:', namevalue);
res.send(`great you are right for post method: ${namevalue}`);
});
app.listen(3000, () => {
console.log('Server running on port 3000');
});
现在,你可以向 /test-search
发送一个POST请求,例如使用Postman或者命令行工具 curl
来测试你的应用是否正确地接收并处理了表单数据。
这种方式让你能够正确地处理HTTP请求,并且避免了在非HTTP上下文中错误地访问 req
和 res
。