javascript - Node/Express - POST 提交并带有最终响应,无需页面渲染/重定向

标签 javascript node.js express

我仍在学习,但有点沮丧,因为我无法使用 ES6 Javascript 找到此问题的解决方案。

我有一个简单的待办事项列表 Web 应用程序,所有内容都通过 html 页面和本地存储提供的 javascript 文件保存和呈现。

我的问题是我希望能够将其部署为具有在线和离线使用的 Node 应用程序。我的想法是能够添加一个任务来渲染客户端并在后台发出 POST 和 DELETE 请求以发送到数据库。

模型正在按照我想要的方式接收和保存,但是我想结束响应 (res),这样页面就不必重新加载并破坏应用程序体验。该代码确实可以使用 res.redirect('back') 工作,但在视觉上并非没有问题,因为它每次都会重新加载。

这是应用程序的 js 文件:

const express       = require('express');
const mongoose      = require('mongoose');
const passport      = require('passport');
const cookieSession = require('cookie-session');
const keys          = require('./config/keys');
const authRoutes    = require('./routes/auth-routes');
const passportSetup = require('./config/passport-setup');

//App
const app = express();

app.set('view engine','ejs');

//Static Files Route
app.use('/resources',express.static('resources'))

//CookieSession
app.use(cookieSession({
    maxAge: 1000*60*60*24,
    keys:   [keys.session.cookieKey]
}));

//Init passport
app.use(passport.initialize());
app.use(passport.session());

//MongoDB Connect
mongoose.connect(keys.mongodb.dbURI,{ useNewUrlParser: true },()=>{console.log('MongoDB connected');})

//Routes
app.use('/auth',authRoutes);
app.use('/submit',require('./routes/submit'));

//Main
app.get('/', (req,res) =>{
    res.render('index',{user: req.user});
});

//Port Listening
app.listen(7000, ()=>{
    console.log("Listening on port 7000");
});

这是我正在使用的 POST 逻辑:

const express = require('express');
const router = express.Router();
const Task = require('../models/task-model');
const bodyParser = require('body-parser');

let urlencodedParser = bodyParser.urlencoded({ exstended:false });

router.post('/', urlencodedParser, (req,res,next)=>{
    let newTask = Object.assign({owner: req.user._id},req.body);
    console.log("POST recieved");
    console.log(newTask);
    res.redirect('back');
    //Task.create(newTask);
});

module.exports = router;

webapp 存储库的离线版本:https://github.com/FalseProspect/myTask-TODO-app/tree/master

TLDR; 是否可以在不使用 ES6(无 JQuery)重定向/渲染同一页面的情况下结束挂起的服务器响应。我希望服务器响应页面时不会发生任何事情。

最佳答案

在您的 post 方法中,使用 res.json()

return res.json({
    success: true,
    message: "Some success message",
    data: "some data if there's any"
});

在您的前端中,检查响应状态或成功值。

关于javascript - Node/Express - POST 提交并带有最终响应,无需页面渲染/重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52657174/

相关文章:

javascript - 无法从服务器得到答案。扩展Js

javascript - EcmaScript 6 中的 Yield 优先级

javascript - MongoDB + Express : How to verify login credentials using db. collection().findOne() 还是 .find()?

javascript - React - 将点击处理程序附加到动态子项

javascript - 将所有对象复制到数组中的最简单方法

javascript - 刷新浏览器时出现错误 "can' 发送后设置 header ”

javascript - 如何使用nodejs实现分段文件上传代理?

javascript - Express 中间件在 MongoDB 查询期间运行多次

javascript - 无法查看 JSON 数据

javascript - 在组件内部的 Angular 4 中创建命名路由器时出现解析错误