Nodejs 实现ajax验证后,点击提交结果显示Not a string or buffer问题
Nodejs 实现ajax验证后,点击提交结果显示Not a string or buffer问题
Connection keep-alive Content-Length 22 Content-Type text/html; charset=utf-8 Date Tue, 18 Dec 2012 10:04:32 GMT X-Powered-By Express 请求头信息原始头信息 Accept text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 Accept-Encoding gzip, deflate Accept-Language zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3 Connection keep-alive Cookie connect.sid=s%3AzgCcpo3MXmtsu2GoOnZMNbBJ.V0Mq1w%2FU6TNmfvN5oaVf52n9zrNoYiQ6MciaOj5dbAs Host 127.0.0.1:3000 Referer http://127.0.0.1:3000/login User-Agent Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0 来自上传流的请求头信息 Content-Length 39 Content-Type application/x-www-form-urlencoded 这是firebug下的请求和响应头信息,主要做一个登录功能,前端点击submit,后台没收到用户名和密码,求指导,我还是那个大三的学生,
你得把代码放上来
莫非你在res.write中写了json?这是不被允许的,只能填入字符串或者buffer
exports.login_name=function(req,res){ var username=req.body.txtUsername; db.findUserByName(username,function(err,doc){ if(!err){ if (doc) res.json({“error”:“1”}); else res.json({“error”:“0”}); } }); };这是后台验证,前后台传的数据都是json
根据你提供的信息,问题可能出在请求的数据格式或处理方式上。你的前端代码通过 AJAX 发送了一个 application/x-www-form-urlencoded
类型的请求,而你的 Node.js 后端代码可能没有正确地解析该类型的数据。
示例代码
假设你使用的是 Express 框架,你需要使用 body-parser
中间件来解析请求体数据。以下是一个简单的示例:
前端代码(使用 jQuery 发起 AJAX 请求)
<form id="loginForm">
<input type="text" name="username" placeholder="Username">
<input type="password" name="password" placeholder="Password">
<button type="submit">Login</button>
</form>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
$(document).ready(function() {
$('#loginForm').on('submit', function(event) {
event.preventDefault(); // 阻止表单默认提交行为
var formData = $(this).serialize(); // 序列化表单数据
$.ajax({
url: '/login',
method: 'POST',
data: formData,
contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
success: function(response) {
console.log('Login successful:', response);
},
error: function(error) {
console.error('Login failed:', error);
}
});
});
});
</script>
后端代码(使用 Express 和 body-parser)
const express = require('express');
const bodyParser = require('body-parser');
const app = express();
// 使用 body-parser 解析请求体
app.use(bodyParser.urlencoded({ extended: false }));
app.post('/login', (req, res) => {
const username = req.body.username;
const password = req.body.password;
if (!username || !password) {
return res.status(400).send('Username and password are required.');
}
// 在这里处理登录逻辑
console.log('Username:', username, 'Password:', password);
res.send('Login successful');
});
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
- 前端:使用 jQuery 的
.serialize()
方法将表单数据序列化为application/x-www-form-urlencoded
格式,并通过 AJAX 发送到/login
路由。 - 后端:使用
body-parser
中间件解析请求体数据。这样可以在req.body
中获取到username
和password
参数。
确保你的 Node.js 项目中已经安装了 express
和 body-parser
,可以通过以下命令安装:
npm install express body-parser
希望这能解决你的问题。如果你还有其他疑问,请提供更多的代码细节。