var express = require('express');
var app = express();
var PORT = 3000;
const bodyParser = require('body-parser')
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}));
app.post('/', function (req, res) {
console.log(req.body);
console.log(req.body.username);
res.end();
});
app.listen(PORT, function(err){
if (err) console.log(err);
console.log("Server listening on PORT", PORT);
});
郵遞員測驗: Post: http://localhost:3000 { "username":"userabc", "password":"passwd1234" }
但是,結果是:{} undefined
uj5u.com熱心網友回復:
嘗試在請求正文中設定 Content-Type: application/json
uj5u.com熱心網友回復:
您需要在請求中將 Content-Type 設定為 application/json。
uj5u.com熱心網友回復:
您撰寫代碼的方式是非常樂觀的方式,如果有人不提供正文可能會導致錯誤,在 api 中進行一些驗證了解事物。
請將代碼僅作為參考實作。這是您需要將其匯入 app.js 或 index.js 模塊的代碼的路由器部分
import express from "express";
import { Request, Response } from "express";
import { body, validationResult } from "express-validator";
import { BadRequestError } from "@omerkiani/common";
import { RequestValidationError } from "@omerkiani/common";
import { User } from "../models/user";
import { validateRequest } from "@omerkiani/common";
import { Password } from "../services/password";
import jwt from "jsonwebtoken";
import { requireAuth } from "@omerkiani/common";
import { currentUser } from "@omerkiani/common";
const router = express.Router();
router.post(
"/api/users/signup",
[
body("email").isEmail().withMessage("Email must be valid"),
body("password")
.trim()
.isLength({ min: 4, max: 20 })
.withMessage("Password must be between 4 and 20 characters"),
],
async (req: Request, res: Response) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
throw new RequestValidationError(errors.array());
}
console.log("Creating a user...");
const { email, password } = req.body;
const exiting = await User.findOne({ email });
if (exiting) {
console.log("Email already in use");
throw new BadRequestError("Email already in use");
}
const user = User.build({ email, password });
await user.save();
//Generate Json Web Token
const userJwt = jwt.sign({ id: user.id, email: user.email }, process.env.JWT_KEY!);
req.session = {jwt: userJwt};
//End
res.status(201).send(user);
}
);
router.post(
'/api/users/signin',
[
body('email')
.isEmail()
.withMessage('Email must be valid'),
body('password')
.trim()
.notEmpty()
.withMessage('You must supply a password')
],
validateRequest,
async (req: Request, res: Response) => {
const { email, password } = req.body;
const existingUser = await User.findOne({ email });
if (!existingUser) {
throw new BadRequestError('Invalid credentials');
}
const passwordsMatch = await Password.compare(
existingUser.password,
password
);
if (!passwordsMatch) {
throw new BadRequestError('Invalid Credentials');
}
// Generate JWT
const userJwt = jwt.sign(
{
id: existingUser.id,
email: existingUser.email
},
process.env.JWT_KEY!
);
// Store it on session object
req.session = {
jwt: userJwt
};
res.status(200).send(existingUser);
}
);
router.post('/api/users/signout', (req, res) => {
req.session = null;
res.send({});
});
router.get('/api/users/currentuser', currentUser, (req, res) => {
res.send({ currentUser: req.currentUser || null });
});
export { router as AuthRouter };
index.js 檔案如下所示
import express from "express";
import cookieSession from 'cookie-session';
import "express-async-errors";
import { AuthRouter } from "./routes/auth_router";
import { errorHandler } from "@omerkiani/common";
import { NotFoundError } from "@omerkiani/common";
import mongoose from "mongoose";
const app = express();
app.set('trust proxy', true);
app.use(express.json());
app.use(cookieSession({
signed: false,
secure: true
}));
app.use(AuthRouter);
app.use(errorHandler);
app.all("*", async (req, res) => {
throw new NotFoundError();
});
const start = async () => {
if (!process.env.JWT_KEY) {
throw new Error("JWT Key Should be Defined");
}
if (!process.env.MONGO_URI) {
throw new Error("Mongo URI Should be Defined");
}
try {
await mongoose.connect(process.env.MONGO_URI!, {});
console.log("Connected to MongoDB");
} catch (err) {
console.error(err);
}
};
app.listen(3000, () => {
console.log("Auth Up on Port 3000!");
});
start();
uj5u.com熱心網友回復:
您是如何設定 Postman 正文請求的?
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/466643.html
標籤:javascript 节点.js 表示 邮政
上一篇:表中的可折疊行不使用任何ID
