使用邮递员测试 api。但请求返回用户名或电子邮件无效
Testing api using postman. But request is returning user name or email is invalid
我从我的 nodejs 后端服务器创建了一个用户登录路由,我想测试 api 但它返回给我一个错误,尽管这是我输入的错误,以防代码没有按预期工作。但是我一遍又一遍地交叉检查代码,我似乎无法指出代码哪里错了。请帮助查看代码可能是我做错了什么,这就是原因。
**userRouter path**
userRouter.post('/signin', expressAsyncHandler(async (req, res) => {
const user = await User.findOne({ email: req.body.email });
if(user) {
if(bcrypt.compareSync(req.body.password, user.password)) {
res.send({
_id: user._id,
name: user.name,
email: user.email,
isAdmin: user.isAdmin,
token: generateToken(user),
});
return;
}
}
res.status(401).send({ message: 'Invalid email or password verification' });
}))
export default userRouter;
**User model path**
import mongoose from 'mongoose';
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true },
password: { type: String, required: true },
isAdmin: { type: Boolean, default: false, required: true },
},
{
timestamps: true
}
);
const User = mongoose.model("User", userSchema);
export default User;
**server.js path...**
import express from 'express';
import mongoose from 'mongoose';
import dotenv from 'dotenv';
import productRouter from './routers/productRouter.js';
import userRouter from './routers/userRouter.js';
dotenv.config()
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
mongoose.connect(process.env.MONGODB_URL || 'mongodb://localhost/e-commerce', {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
});
app.use('/api/users', userRouter);
app.use('/api/products', productRouter);
app.get('/', (req, res) => {
res.send('Node server is Serve here');
});
const port = process.env.PORT || 5000;
app.use((err, req, res, next) => {
res.status(500).send({ message: err.message });
});
app.listen(5000, () => {
console.log(`serve at http://localhost/${port}`)
});
**utils.js for generating jsonwebtoken**
export const generateToken= (user) => {
return jwt.signin({
_id: user._id,
name: user.name,
email: user.email,
isAdmin: user.isAdmin,
}, process.env.JWT_SECRET,
{
expiresIn: '30d',
}
);
}
在 Express 中,res.send() 用于字符串和缓冲区对象。要发送 json 数据,您需要使用其他东西:
而不是 res.send(jsondata)
使用 res.json(jsondata)
文档:https://www.geeksforgeeks.org/express-js-res-json-function/
我从我的 nodejs 后端服务器创建了一个用户登录路由,我想测试 api 但它返回给我一个错误,尽管这是我输入的错误,以防代码没有按预期工作。但是我一遍又一遍地交叉检查代码,我似乎无法指出代码哪里错了。请帮助查看代码可能是我做错了什么,这就是原因。
**userRouter path**
userRouter.post('/signin', expressAsyncHandler(async (req, res) => {
const user = await User.findOne({ email: req.body.email });
if(user) {
if(bcrypt.compareSync(req.body.password, user.password)) {
res.send({
_id: user._id,
name: user.name,
email: user.email,
isAdmin: user.isAdmin,
token: generateToken(user),
});
return;
}
}
res.status(401).send({ message: 'Invalid email or password verification' });
}))
export default userRouter;
**User model path**
import mongoose from 'mongoose';
const userSchema = new mongoose.Schema({
name: { type: String, required: true },
email: { type: String, required: true },
password: { type: String, required: true },
isAdmin: { type: Boolean, default: false, required: true },
},
{
timestamps: true
}
);
const User = mongoose.model("User", userSchema);
export default User;
**server.js path...**
import express from 'express';
import mongoose from 'mongoose';
import dotenv from 'dotenv';
import productRouter from './routers/productRouter.js';
import userRouter from './routers/userRouter.js';
dotenv.config()
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
mongoose.connect(process.env.MONGODB_URL || 'mongodb://localhost/e-commerce', {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
});
app.use('/api/users', userRouter);
app.use('/api/products', productRouter);
app.get('/', (req, res) => {
res.send('Node server is Serve here');
});
const port = process.env.PORT || 5000;
app.use((err, req, res, next) => {
res.status(500).send({ message: err.message });
});
app.listen(5000, () => {
console.log(`serve at http://localhost/${port}`)
});
**utils.js for generating jsonwebtoken**
export const generateToken= (user) => {
return jwt.signin({
_id: user._id,
name: user.name,
email: user.email,
isAdmin: user.isAdmin,
}, process.env.JWT_SECRET,
{
expiresIn: '30d',
}
);
}
在 Express 中,res.send() 用于字符串和缓冲区对象。要发送 json 数据,您需要使用其他东西:
而不是 res.send(jsondata)
使用 res.json(jsondata)
文档:https://www.geeksforgeeks.org/express-js-res-json-function/